[CMake] Unit tests, but not CTest
Magnus Therning
magnus at therning.org
Thu May 13 01:36:05 EDT 2010
On 13/05/10 02:31, Michael Hertling wrote:
> On 05/11/2010 10:51 AM, Magnus Therning wrote:
>> I'm still having problems with this.
>>
>> I put together this:
>>
>> project( test-post-build NONE )
>> cmake_minimum_required( VERSION 2.8 )
>>
>> set( output ${CMAKE_CURRENT_BINARY_DIR}/foo )
>> add_custom_command( OUTPUT ${output}
>> COMMAND touch ${output}
>> COMMENT "Touching foo"
>> )
>> add_custom_target( foo.build ALL DEPENDS ${output} )
>>
>> add_custom_command( TARGET ${output}
>> POST_BUILD
>> COMMAND echo "POST_BUILD ${output}"
>> )
>>
>> add_custom_command( TARGET foo.build
>> POST_BUILD
>> COMMAND echo "POST_BUILD foo.build"
>> )
>>
>> Based on your description above I expected this behaviour:
>>
>> % cmake ..
>> -- Configuring done
>> -- Generating done
>> -- Build files have been written to:
>> /home/magnus/Play/test/cmake/post_build/_build
>> % make
>> Scanning dependencies of target foo.build
>> [ 0%] Touching foo
>> POST_BUILD /home/magnus/Play/test/cmake/post_build/_build/foo
>> POST_BUILD foo.build
>> [100%] Built target foo.build
>> % make
>> POST_BUILD foo.build
>> [100%] Built target foo.build
>>
>> However, that's not the case. I only ever see the 'POST_BUILD foo.build'
>> printed. [...]
>
> AFAIK, this is because your "add_custom_command(TARGET ${output} ...)"
> is not associated with an actual target but with just a file whereas
> "add_custom_command(TARGET foo.build ...)" actually refers to a target
> "foo.build" defined by ADD_CUSTOM_TARGET(). Indeed, you may issue any
> ADD_CUSTOM_COMMAND(TARGET ...) for undefined targets without causing
> an error, but their commands will never be executed, of course.
>
>> [...] So, what target can I use to get the desired behaviour of the
>> POST_BUILD only being run after an actual build?
>
> Just use a target - but really a target - after whose rebuild you like
> to have your post-build custom commands being run.
>
> Hope this helps.
I'm sorry, but it doesn't :-( I have two POST_BUILD commands above, one
attached to the creation of a file and one to a target. The former I thought
was attached to the creation of a file (the OUTPUT of a command) the latter to
a custom target (which depends on the OUTPUT of the former). The former is
*never* run, the latter is *always* run. The explanations in this thread so
far has explained why CMake behaves this way, but how do I make the creation
of the file into "a target - but really a target" so I can attach the
POST_BUILD command to it?
Would you mind correcting my CMake script from above as an example of how it
can be done?
I have the following:
project( test-post-build NONE )
cmake_minimum_required( VERSION 2.8 )
set( output ${CMAKE_CURRENT_BINARY_DIR}/foo )
add_custom_command( OUTPUT ${output}
COMMAND touch ${output}
COMMENT "Touching foo"
)
I now want the text "POST_BUILD" echoed to stdout iff the command to create
${output} is run. (With the explanations I've gotten in this thread so far I
don't even see how that can be done.)
/M
--
Magnus Therning (OpenPGP: 0xAB4DFBA4)
magnus@therning.org Jabber: magnus@therning.org
http://therning.org/magnus identi.ca|twitter: magthe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100513/bf8df6a9/attachment.pgp>
More information about the CMake
mailing list