[CMake] cmake my_BouncyBall

luxInteg lux-integ at btconnect.com
Wed Nov 10 09:50:13 EST 2010


On Tuesday 09 November 2010 17:35:08 Michael Hertling wrote:
> On 11/07/2010 03:37 PM, luxInteg wrote:
> > On Sunday 07 November 2010 11:34:47 Richard Wackerbarth wrote:
> >> First let me suggest that you word your request in a more complete
> >> manner. What "does not work"?
> > 
> > cant get an executable generated  because the  'COMMAND' syntax is
> > incorrect" so could you suggest the correct syntax please?
> > 
> >> What were you expecting and what did you get?
> >> It is difficult, if not impossible, for us to guess.
> >> 
> >> I suspect that the problem is related to the ">" (specifying the output
> >> file in Unix). Are you on a Un*x platform?
> > 
> > yes linux
> > 
> >> Remember that CMake uses a
> >> different syntax because it assumes that the platform may not be
> >> Unix-based.
> >> 
> >> I also have no idea just what "BouncyBall" is supposed to do
> > 
> > generate BouncyBall.out
> > 
> >> They look very much like a call to the
> >> Unix "diff" command to verify that the output matches some previous
> >> version (stored in BouncyBall.out)
> > 
> > correct
> > 
> > which requires the  generation  an executable file first.
> > 
> >> Provide additional details. Then we may be able to be more helpful.
> > 
> > DETAILS: as requested:
> >  add_executable(BouncyBall BouncyBall.c)
> >  find_library(OLD_LIBRARY OLD)
> >  target_link_libraries(BouncyBall ${OLD_LIBRARY})
> >  COMMAND(./BouncyBall > my_BouncyBall.out
> >  
> >        - diff BouncyBall.out my_BouncyBall.out)
> > 
> > what is needed:-
> > 
> > 
> > a) syntax for generating BouncyBall executable   with oppropriate linking
> > to ${OLD_LIBRARY}
> 
> The ADD_EXECUTABLE(), FIND_LIBRARY() and TARGET_LINK_LIBRARIES()
> commands look good, provided the library OLD is actually found.
> 
> > b) syntax within cmake  for executing  BouncyBall executable   and
> > diffing output to 'existing'  outputfile
> > 
> > i.e this bit:-
> > (
> > 
> >  COMMAND(./BouncyBall > my_BouncyBall.out
> > 
> > - diff BouncyBall.out   my_BouncyBall.out )
> > )
> 
> Here, you might use a test driven by a simple CMake script:
> 
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
> PROJECT(BOUNCYBALL C)
> ENABLE_TESTING()
> FILE(WRITE ${CMAKE_BINARY_DIR}/bouncyball.out "bouncyball\n")
> FILE(WRITE ${CMAKE_BINARY_DIR}/bouncyball.cmake "
> EXECUTE_PROCESS(
>     COMMAND \${EXEC} COMMAND diff - \${FILE} RESULT_VARIABLE RESULT
> )
> IF(NOT RESULT EQUAL 0)
>     MESSAGE(FATAL_ERROR)
> ENDIF()
> ")
> FILE(WRITE ${CMAKE_BINARY_DIR}/bouncyball.c "
> #include <stdio.h>
> int main(void){
>     printf(\"bouncyball\\n\");
>     return 0;
> }
> ")
> ADD_EXECUTABLE(bouncyball bouncyball.c)
> ADD_TEST(NAME bouncyball
>     COMMAND ${CMAKE_COMMAND}
>     -DEXEC=$<TARGET_FILE:bouncyball>
>     -DFILE=${CMAKE_BINARY_DIR}/bouncyball.out
>     -P ${CMAKE_BINARY_DIR}/bouncyball.cmake
> )
> 
> After configuration, if you edit bouncyball.out you can see the test
> pass or fail, depending on its contents; use "make test" or "ctest".
> 
thanks for your help,  I have gone off on a tanget at present but as soon as 
things  turn back in this direction I will give it a whirl and report my 
findings.



More information about the CMake mailing list