On Mon, May 10, 2010 at 17:28, Tyler Roscoe <[email protected]> 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
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake