[CMake] Unit tests, but not CTest
Magnus Therning
magnus at therning.org
Tue May 11 04:51:46 EDT 2010
On Mon, May 10, 2010 at 17:28, Tyler Roscoe <tyler at cryptio.net> wrote:
> Let's keep this on the list in case it helps someone else.
>
> On Fri, May 07, 2010 at 10:27:16PM +0100, Magnus Therning wrote:
>> On 07/05/10 17:24, Tyler Roscoe wrote:
>> > On Fri, May 07, 2010 at 04:41:23PM +0100, Magnus Therning wrote:
>> >>> add_custom_command (TARGET ${PROJECT_NAME}
>> >>> POST_BUILD
>> >>> # Call the runner script directly. By doing it this way, all the
>> >>> # unit tests in the executable run at once. If we call CTest
>> >>> # here (like we do for the _runtest target), the script (and
>> >>> # thus the python interpreter) is invoked once for each test in
>> >>> # the executable, which is slower than calling the script once.
>> >>> COMMAND ${PYTHON_EXECUTABLE} ${${PROJECT_NAME}_TESTRUNNER} ${CMAKE_CFG_INTDIR} --gtest_print_time
>> >>> )
>> >>
>> >> One thing though, it seems the command is run *always* irrespective of
>> >> whether the target is built or not. That doesn't seem to square up
>> >> with the text in the man page:
>> >
>> > Works For Me. I only see unit test runs if the library in question is
>> > recompiled or relinked. What version of CMake are you using?
>>
>> 2.8
>>
>> What kind of target is ${PROJECT_NAME}?
>>
>> I used a target created with add_custom_target, so maybe that's the cause of it.
>
> I think all the targets in our project which use this post-build step
> are libraries or executables.
>
> If your target is a custom_target that always runs (which, as noted in
> the docs, custom_targets sometimes do) then of course the post-build
> step will also always run.
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. So, what target can I use to get the desired behaviour of the
POST_BUILD only being run after an actual build?
/M
--
Magnus Therning (OpenPGP: 0xAB4DFBA4)
magnus@therning.org Jabber: magnus@therning.org
http://therning.org/magnus identi.ca|twitter: magthe
More information about the CMake
mailing list