You should be able to add a new custom target named copy and make it target for your custom commands:
file(GLOB ConfigFiles ${CMAKE_SOURCE_DIR}/config/*.xml ${CMAKE_SOURCE_DIR}/config/*.conf) add_custom_target(copy) foreach(ConfigFile ${ConfigFiles}) add_custom_command(TARGET copy PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ConfigFile} $<TARGET_FILE_DIR:MyTarget>) endforeach()
Now user commands will only be executed if you build copy .
If you want to keep this copy target as a dependency of MyTarget so that you can either copy the files or copy them if you build MyTarget , you will need to break the circular dependency. ( MyTarget depends on copy , but copy depends on MyTarget to get the location of the copy-to directory).
To do this, you can resort to the old way of getting the target output directory:
add_custom_target(copy) get_target_property(MyTargetLocation MyTarget LOCATION) get_filename_component(MyTargetDir ${MyTargetLocation} PATH) foreach(ConfigFile ${ConfigFiles}) add_custom_command(TARGET copy PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${ConfigFile} ${MyTargetDir}) endforeach() add_dependencies(MyTarget copy)
Fraser Jan 23 '13 at 8:07 2013-01-23 08:07
source share