首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[CMakeLists]使用CMake后如何将目录内容复制到build目录

[CMakeLists]使用CMake后如何将目录内容复制到build目录

作者头像
云未归来
发布2025-07-17 15:07:52
发布2025-07-17 15:07:52
12200
代码可运行
举报
运行总次数:0
代码可运行

你可以用add_custom_command.

说你的目标被调用MyTarget,然后你可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
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最终的目录时,都会执行此操作.

正如马克Lakata在下面评论指出,更换PRE_BUILDPOST_BUILDadd_custom_command确保复制如果生成成功才会发生.

说明
  • ${CMAKE_COMMAND} 是CMake的路径
  • -E 使CMake运行命令而不是构建
  • copy_directory是一个命令行工具
  • config是一个生成器表达式,在$<TARGET_FILE_DIR:MyTarget>文档中描述.
  • 有没有办法让`make clean`知道在项目清理时必须删除复制的文件? (6认同)
  • POST_BUILD可能是更好的选择,这意味着只有在构建成功时才会复制文件. (5认同)
  • 有没有办法复制目录本身而不是内容? (3认同)

除了最佳答案,

要复制目录本身而不是内容,您可以添加/${FOLDER_NAME}到第二个参数的末尾。

像这样:

代码语言:javascript
代码运行次数:0
运行
复制
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                       ${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)

使用符号链接


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

代码语言:javascript
代码运行次数:0
运行
复制
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)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 使用符号链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档