CMake场景下如何将已构建的库及头文件移动到指定项目目录?
手动移动(单次使用场景)
你可以直接在项目根目录(包含foo、bar、cmake-build-debug三个子目录的层级)执行命令完成移动:
- 移动头文件
foo.h:
Linux/macOS 终端:cp ./foo/include/foo.h ./bar/dependencies/foo/include/
Windows CMD:copy .\foo\include\foo.h .\bar\dependencies\foo\include\
Windows PowerShell:Copy-Item .\foo\include\foo.h .\bar\dependencies\foo\include\ - 移动静态库
libfoo.a:
Linux/macOS 终端:cp ./cmake-build-debug/foo/libfoo.a ./bar/dependencies/foo/lib/
Windows CMD:copy .\cmake-build-debug\foo\libfoo.a .\bar\dependencies\foo\lib\
Windows PowerShell:Copy-Item .\cmake-build-debug\foo\libfoo.a .\bar\dependencies\foo\lib\
CMake自动同步(日常开发推荐)
修改foo项目的CMake配置,实现每次构建foo完成后自动把最新的头文件和库同步到bar的依赖目录,无需手动操作,且跨平台兼容:
- 打开
foo/CMakeLists.txt,在定义foo库的代码(也就是add_library(foo ...)语句之后)添加以下规则:
# 同步头文件到bar的依赖目录 add_custom_command(TARGET foo POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/../bar/dependencies/foo/include ) # 同步编译生成的静态库到bar的依赖目录 add_custom_command(TARGET foo POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:foo> ${PROJECT_SOURCE_DIR}/../bar/dependencies/foo/lib )
- 如果你配置了顶层CMakeLists.txt,还可以添加依赖声明,实现构建bar时自动先构建foo并同步最新产物:
在顶层CMakeLists.txt中添加:add_dependencies(bar foo)
如果你的目录层级和示例有差异,调整上述配置里的目标路径即可。
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

