如何将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
相关产品推荐
相关产品推荐

