我在config
源文件旁边的目录中有一些配置文件(xml、ini、...)。每次制作项目时,如何将配置目录中的所有文件复制到构建目录(可执行文件旁边)?
问问题
84069 次
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_BUILD
为POST_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 回答