我在源文件旁边的config
目录中有一些配置文件(xml,ini,...)。如何在每次创建项目时将config目录中的所有文件复制到构建目录(可执行文件旁边)?
答案 0 :(得分:107)
您可以使用add_custom_command
。
假设你的目标被称为MyTarget
,那么你可以这样做:
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:MyTarget>)
每次构建MyTarget
时都会执行此操作,并将“/ config”的内容复制到目标exe / lib最终的目录中。
正如Mark Lakata在下面的评论中指出的那样,将PRE_BUILD
替换为POST_BUILD
中的add_custom_command
可确保只有在构建成功时才会进行复制。
${CMAKE_COMMAND}
是CMake的路径-E
制作CMake运行命令而不是构建copy_directory
是Command-Line Tool $<TARGET_FILE_DIR:MyTarget>
是生成器表达式,在add_custom_command
文档中有描述。答案 1 :(得分:5)
CMake支持shell类型文件副本。此链接应对您有所帮助 - How to copy directory from source tree to binary tree?
答案 2 :(得分:0)
除了最重要的答案,
要复制目录本身而不是目录,可以在第二个参数的末尾添加/${FOLDER_NAME}
。
赞:
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
答案 3 :(得分:-3)
在我的项目中,我使用INSTALL在CMake中指定,使用conf文件移动二进制文件的内容和位置。执行cmake后,使用“make install”。