c++ - 使用带有仅标头库的 Find*.cmake 文件
问题描述
我正在创建一个仅包含头文件的库(库 A),其中包含使用其FindB.cmake
文件的另一个库(库 B)。
我将 FindB.cmake 文件包含在 cmake 目录中并执行以下操作:
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
find_package(B REQUIRED)
target_link_libraries(A INTERFACE B::B)
库 A 上的测试一切正常,因此 B 成功包含在 A 中。为了使 B 可用于想要包含 A 的项目,我在我的AConfig.cmake.in
:
include(CMakeFindDependencyMacro)
find_dependency(B REQUIRED)
但是,当我尝试创建一个使用库 A(带有find_package(A REQUIRED)
)的应用程序(应用程序 C)时,我收到一个错误,即 cmake 找不到该FindB.cmake
文件。如果我将FindB.cmake
文件放入 App C 项目并像使用库 A 一样包含它,错误就会消失,但我不希望使用库 A 的人需要该FindB.cmake
文件。
有没有一种方法可以将所有位置信息FindB.cmake
从库 A 转移到应用程序 C,而无需包含实际FindB.cmake
文件?
解决方案
@Tsyvarev 有答案。
我添加了这个来安装FindB.cmake
:
install(FILES "${PROJECT_SOURCE_DIR}/cmake/FindB.cmake"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/A/cmake
)
然后在我的 中AConfig.cmake.in
,我使用以下内容对其进行了编辑:
set(CMAKE_MODULE_PATH @CMAKE_INSTALL_DATAROOTDIR@/A/cmake @CMAKE_MODULE_PATH@)
find_dependency(B REQUIRED)
我现在可以将库 A 添加到应用程序 C,find_package(A REQUIRED)
并且所有内容都可以转移。
再次感谢@Tsyvarev
推荐阅读
- vb.net - Visual Basic 查找 GPU 专用内存 NVIDIA 或 AMD
- javascript - 如何修复“未提交文件”。尝试使用 django Rest 框架上传文件并使用 Axios 进行反应时
- python - 气流相对进口
- android - ViewPager 找不到符号类 ScreenSlidePageFragment
- python - 为什么我的 anaconda python2.7 env 在 Spyder 中打开为 python 3?
- go - 处理多个 websocket 连接
- django-rest-framework - django-rest-framework 使用 HttpOnly Cookie
- reactjs - Webpack + `create-react-app` | ProvidePlugin 未将 React 作为模块加载
- ios - 跨应用程序在 UILable 上添加 Tapgesture
- mysql - 使用 MySQL 作为会话存储时的重定向问题