On Fri, Aug 28, 2009 at 11:28:53AM -0700, King, Steven R wrote:
> I'm building a dynamically loadable module and an executable to test
> it. Each lives in a different directory. My test program needs to
> know the location of the dll when calling dlopen(). To solve this, I
> created a custom command to copy the dll to the binary directory of
> the test program. This works, but I have an annoying dependency
> problem. Specifically, if the dll gets rebuilt, the copy command does
> not execute. The copy command only executes if the test program gets
> rebuilt. I do not understand how to make this copy depend on the dll
> being rebuilt. I want all test programs to "pull" the rebuilt dll as
> needed. I do not want the CMakeLists.txt for the dll to have any
> knowledge of the test programs.
Wrap your custom_command with a custom_target. See the CMake FAQ for
some recipes.
Then just do:
add_dependencies (test_my_module custom_target_that_copies_my_module)
> In CMakeLists.txt for the test program:
> add_dependencies (
> test_my_module
> my_module # not needed?
> )
You do want this stanza.
> # Put the location of the .so library we need in the SO_LOCATION variable.
> # We then use this location in the copy command below.
> get_target_property (
> SO_LOCATION
> my_module # .so library target
> LOCATION
> )
You don't need to do this. Since "my_module" is a CMake target, you can
just use "my_module" instead of ${SO_LOCATION} in the custom_command
below and CMake will figure out where the .so is on the disk
> # Create a custom build step to copy the dynamically loaded .so file
> # into the this directory so our test executable can find it.
> add_custom_command (
> TARGET test_my_module
> POST_BUILD
> DEPENDS my_module # no effect?
> COMMAND ${CMAKE_COMMAND} -E copy ${SO_LOCATION}
> ${CMAKE_CURRENT_BINARY_DIR}
> COMMENT "CUSTOM COMMAND: Copy my_module to build
> directory"
> )
You may want to use -E copy_if_different there instead.
tyler
_______________________________________________
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