You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CMake配置文件加入构建树,无需安装即可使用find_package

无需安装即可用find_package调用构建树中的共享库

要实现这个需求,核心是让CMake在构建树中生成完整的包配置文件,并将构建树注册到CMake的包查找路径中,具体步骤如下:

1. 编写CMake配置模板文件

在你的库项目中创建一个配置模板(比如命名为MyLibConfig.cmake.in),内容需要包含构建树相关的路径信息,示例如下:

# 导入目标文件
include("${CMAKE_CURRENT_LIST_DIR}/MyLibTargets.cmake")

# 设置构建树中的头文件目录
set(MyLib_INCLUDE_DIRS "@CMAKE_CURRENT_SOURCE_DIR@/include")

# 设置库目标
set(MyLib_LIBRARIES MyLib)

2. 生成构建树内的配置文件

在库项目的CMakeLists.txt中,使用configure_file命令将模板文件生成到构建目录的指定位置(比如cmake子目录):

configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/MyLibConfig.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/cmake/MyLibConfig.cmake
    @ONLY
)

3. 导出构建树中的目标

继续在CMakeLists.txt中添加export命令,将库目标导出到构建树的目标文件中,同时注册包信息:

# 导出目标到构建树的Targets文件
export(TARGETS MyLib
    FILE ${CMAKE_CURRENT_BINARY_DIR}/cmake/MyLibTargets.cmake
)

# 将当前构建树注册到CMake的包注册表,这样其他项目无需手动指定路径也能找到
export(PACKAGE MyLib)

4. 在其他项目中调用

在依赖该库的项目中,直接使用find_package即可:

find_package(MyLib REQUIRED)

# 链接库目标
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE MyLib)

如果export(PACKAGE)没有生效(比如跨用户环境),可以在构建依赖项目时手动指定构建树路径:

cmake -S . -B build -DCMAKE_PREFIX_PATH=/path/to/MyLib/build

内容的提问来源于stack exchange,提问作者ManuelSchneid3r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:01:06