如何使用CMake将目录的内容复制到构建目录中?

时间:2012-11-17 10:25:24

标签: c++ cmake

我在源文件旁边的config目录中有一些配置文件(xml,ini,...)。如何在每次创建项目时将config目录中的所有文件复制到构建目录(可执行文件旁边)?

4 个答案:

答案 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_directoryCommand-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”。