我在config目录下的源文件旁边有一些配置文件(xml,ini,...)。我如何在每次创建项目时将config目录下的所有文件复制到build目录(可执行文件旁边)?
config
dgenwo3n1#
您可以使用add_custom_command。假设您的目标名为MyTarget,则可以执行以下操作:
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可以确保只有在构建成功时才会进行复制。
POST_BUILD
PRE_BUILD
${CMAKE_COMMAND}
-E
copy_directory
$<TARGET_FILE_DIR:MyTarget>
guicsvcw2#
除了上面的答案,要复制目录本身而不是内容,可以将/${FOLDER_NAME}添加到第二个参数的末尾。就像这样:
/${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)
bvjveswy3#
CMake支持shell类型文件复制。此链接对您应该有帮助-How to copy directory from source tree to binary tree?
px9o7tmv4#
CMake通过create_symlink启用符号链接:
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文件夹将随后更新。
30byixjq5#
在我的项目中,我使用INSTALL来指定在CMake中,我用conf文件移动我的二进制文件的内容和位置。在执行完Cmake后,使用“make install”。
5条答案
按热度按时间dgenwo3n1#
您可以使用
add_custom_command
。假设您的目标名为
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
文档中所述。guicsvcw2#
除了上面的答案,
要复制目录本身而不是内容,可以将
/${FOLDER_NAME}
添加到第二个参数的末尾。就像这样:
bvjveswy3#
CMake支持shell类型文件复制。此链接对您应该有帮助-How to copy directory from source tree to binary tree?
px9o7tmv4#
* 使用符号链接 *
CMake通过
create_symlink
启用符号链接:它确保当您对目录中的文件进行更改时,build文件夹将随后更新。
30byixjq5#
在我的项目中,我使用INSTALL来指定在CMake中,我用conf文件移动我的二进制文件的内容和位置。在执行完Cmake后,使用“make install”。