如何在使用CMake制作后将目录的内容复制到build目录中?

nkoocmlb  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(263)

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

dgenwo3n

dgenwo3n1#

您可以使用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在下面的注解中所指出的,在add_custom_command中用POST_BUILD替换PRE_BUILD可以确保只有在构建成功时才会进行复制。

说明

  • ${CMAKE_COMMAND}是CMake的路径
  • -E使CMake运行命令而不是生成
  • copy_directory是 * 命令行工具 *
  • config是目录(福尔斯项目的根目录下),其内容将被复制到构建目标中
  • $<TARGET_FILE_DIR:MyTarget>是一个 * 生成器表达式 *,如add_custom_command文档中所述。
guicsvcw

guicsvcw2#

除了上面的答案,
要复制目录本身而不是内容,可以将/${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)
bvjveswy

bvjveswy3#

CMake支持shell类型文件复制。此链接对您应该有帮助-How to copy directory from source tree to binary tree?

px9o7tmv

px9o7tmv4#

* 使用符号链接 *

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)

它确保当您对目录中的文件进行更改时,build文件夹将随后更新。

30byixjq

30byixjq5#

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

相关问题