91

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

4

5 回答 5

161

您可以使用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_BUILDPOST_BUILD确保add_custom_command只有在构建成功时才会发生复制。

解释

  • ${CMAKE_COMMAND}是 CMake 的路径
  • -E使 CMake 运行命令而不是构建
  • copy_directory是一个命令行工具
  • config是将其内容复制到构建目标中的目录(位于项目的根目录下)
  • $<TARGET_FILE_DIR:MyTarget>是一个生成器表达式,在add_custom_command文档中进行了描述。
于 2012-11-17T11:12:50.477 回答
19

除了上面的答案,

要复制目录本身而不是内容,可以添加/${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)
于 2019-03-17T15:34:09.203 回答
5

CMake 支持 shell 类型的文件副本。这个链接应该对你有帮助 -如何将目录从源代码树复制到二叉树?

于 2012-11-17T10:43:05.817 回答
3

使用符号链接


CMake 通过以下方式启用符号链接create_symlink

add_custom_command(TARGET ${CMAKE_PROJECT_NAME} PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E create_symlink
                   ${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)

它确保当您更改目录中的文件时,构建文件夹随后将被更新。

于 2021-11-06T09:57:59.817 回答
-5

在我的项目中,我使用 INSTALL 在 CMake 中指定使用 conf 文件移动二进制文件的内容和位置。执行 cmake 后,使用“make install”。

于 2012-11-17T10:46:00.767 回答