[CMake] cmake my_BouncyBall
Michael Hertling
mhertling at online.de
Tue Nov 9 12:35:08 EST 2010
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".
Regards,
Michael
> I hope I did provide the example unix Makefile that is being translated.
>
> thanks
> and
> regards
>
>> On Nov 7, 2010, at 6:08 AM, luxInteg wrote:
>>> Greetings,
>>>
>>> I am learning cmake. and I have taken the following from an old
>>> Makefile:- INC = ../include/BouncyBall.h
>>>
>>> BouncyBall: BouncyBall.c library $(INC)
>>>
>>> ${CC} ${CFLAGS} -o BouncyBall BouncyBall.c ../lib/libOLD.a
>>> ./BouncyBall > my_BouncyBall.out - diff BouncyBall.out
>>> my_BouncyBall.out
>>>
>>> and 'translated' for cmake as the following:-
>>> -----------------------
>>> 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)
>>>
>>> install(TARGETS
>>> BouncyBall
>>> BouncyBall.out
>>> my_BouncyBall.out
>>> DESTINATION bin)
>>> -----------------------
>>> but it does not work
>>>
>>> advice would be appreciated
>>>
>>> sincerely
>>> luxInteg
More information about the CMake
mailing list