我使用下面的命令来配置文件复制到每个编译后生成目录。
# 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()
这个动作被触发我每次编译项目的时间。 是否有可能创造的CMakeLists.txt目标来复制文件,而无需编译任何东西? 像“做副本”。
你应该能够添加新的自定义目标调用copy
,让您的自定义的目标命令:
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()
现在,如果你建立自定义命令将只执行copy
。
如果你想保持这个copy
的目标作为一个依赖MyTarget
这样你可以只复制文件或者如果你建立他们复制MyTarget
,你需要打破循环依赖。 ( MyTarget
依赖于copy
,但copy
依赖于MyTarget
得到复制到目录的位置)。
要做到这一点,你可以诉诸获得一个目标的输出目录的老式的方法:
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)