我的源代码旁边有一些配置文件(xml、ini等),它们存放在config
文件夹中。每次构建项目时,我该如何将config文件夹中的所有文件复制到生成目录中(与可执行文件相邻的目录)?
你可以使用 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
中的 PRE_BUILD
替换为 POST_BUILD
可以确保只有在构建成功时才会进行复制。
${CMAKE_COMMAND}
是 CMake 的路径-E
使 CMake 运行命令而不是构建copy_directory
是一个命令行工具config
是要复制到构建目标中的(项目根目录下的)目录$<TARGET_FILE_DIR:MyTarget>
是一个生成器表达式,在 add_custom_command
文档中有描述。除了最佳答案之外,
如果要复制整个目录而不是其中的内容,您可以在第二个参数的末尾添加/${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)
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)
.so
文件所在的构建目录中,您可以将其他Python文件的链接放在源目录中。然后,您可以使用install(TARGET compiled_lib ...)
和install(FILES <python files> ...)
命令将Python文件从源目录复制到安装前缀的某个位置。非开发者应始终使用已安装的软件包。 - Philippe Carphininstall
。 - satk0install()
命令,但这是一个特殊情况:代码构建成功,通过了单元测试,并准备好供他人使用。 我不会安装它来调试。 - PfunnyGuy
make clean
之后才会被复制。简单的make不会复制配置文件。有什么想法吗? - B Faley