I am using the following command to copy config files into the build directory after each compile.
# Gather list of all .xml and .conf files in "/config"
file(GLOB ConfigFiles ${CMAKE_SOURCE_DIR}/config/*.xml
${CMAKE_SOURCE_DIR}/config/*.conf)
foreach(ConfigFile ${ConfigFiles})
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy ${ConfigFile} $<TARGET_FILE_DIR:MyTarget>)
endforeach()
This action is triggered every time I compile the project. Is it possible to create a target in CMakeLists.txt to copy files without needing to compile anything? Something like “make copy”.
You should be able to add a new custom target called
copyand make that the target of your custom commands:Now the custom commands will only execute if you build
copy.If you want to keep this
copytarget as a dependency ofMyTargetso that you can either just copy the files or have them copied if you buildMyTarget, you’ll need to break the cyclic dependency. (MyTargetdepends oncopy, butcopydepends onMyTargetto get the location of the copy-to directory).To do this, you can resort to the old-fashioned way of getting a target’s output directory: