cmake程序包注册表/查找子模块的最新安装

时间:2018-11-13 23:53:41

标签: c cmake

我有一个带有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文件(我想在安装前缀目录中找到它)。大概我必须显式包括该配置文件才能访问它设置的变量?

我认为没有人在回答我,因为其他所有人都只是在上游项目中设置了两个环境变量,在下游项目中读取了这些变量,并称之为一天?这一切似乎应该非常简单。

0 个答案:

没有答案