我有一个带有OS抽象层(OSAL)的大型cmake项目,我想在另一个项目中使用它。大型项目是...非常敏感而不是我的,但是向安装中添加 new 信息始终是一个选择。
基本情况是这样。大型项目具有安装前缀,通常为_install
。所有子模块最终都在此较大项目的_build/_install/lib
和_build/_install/include
中。而且,大型项目具有非常可配置的构建,因此存在许多_build
目录(_dbBuild
,_clientBuild
,_serverBuild
等)。
子模块的安装很简单(其中DESTINATION
只是安装前缀)...
install (TARGETS osal DESTINATION lib)
install (FILES ${OSAL_HDRS} DESTINATION include)
给出一个完全独立的项目,找到这些标头/库的最佳方法是什么?我几乎总是想要它们的最新安装。
各种Google搜索使其成为一个不错的选择。
https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#user-package-registry
我的基本问题是,对于源项目,这似乎应该是1或2行代码,对于第二个项目/正在使用的项目也是如此…… 存储最新的包(或include / lib) )位置,然后在目标位置读取它。 但是,我所看到的都是非常复杂的场景,其中包含20-30行cmake配置。我想在目的地复制Find*
的行为:
find_path(OSAL_INCLUDE_DIR osal.h)
find_library(OSAL_LIBRARIES NAMES osal)
像find*
一样,我希望能够覆盖找到的位置。我还希望一个 existing 构建可以找到一个新位置(如果存在)(不仅仅是一次找到完成)。但是最后一点是可选的。
实现此目标的直接方法是什么?对于所链接的文档中的其他内容来说,这对其他人来说很明显,我深表歉意。由于某些原因,cmake文档对我来说是难以理解的。在发帖之前,我盯着它看了一个多小时。
现在开始使用install(TARGETS EXPORT)
,install(EXPORT)
,export(PACKAGE)
和osalConfig.cmake
文件的各种形式玩几个小时。下游项目设法在build文件夹中找到Config文件(我想在安装前缀目录中找到它)。大概我必须显式包括该配置文件才能访问它设置的变量?
我认为没有人在回答我,因为其他所有人都只是在上游项目中设置了两个环境变量,在下游项目中读取了这些变量,并称之为一天?这一切似乎应该非常简单。