首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在cmake包注册表中注册安装目录

如何在cmake包注册表中注册安装目录
EN

Stack Overflow用户
提问于 2019-04-12 22:47:46
回答 1查看 834关注 0票数 10

假设我已经编写了一个库<mylib>,可以通过cmake构建一个安装。我还有一个<mylib>Config.cmake文件,可以定位所有必要的文件(库、头、.)并为图书馆导出一个目标。

如果我想在find_package(...)中使用这个库,cmake需要知道配置文件的位置。我知道每次我使用库构建一个项目时都可以传递这个函数,或者我可以(对于cmake3.13和更新版本)将<mylib>_ROOT环境变量指向它。

但是有一个解决方案对我来说要简单得多:我可以使用export(PACKAGE <PackageName>)命令在cmake注册表中注册一个包。但是,如果我正确理解它的文档,这只允许注册构建目录。我的构建目录通常既不包含配置文件,也不包含可能需要的其他东西,比如包含文件。当然,我可以在那里复制它们,但是如果我已经在安装目录中很好地设置了所有内容,我为什么要这样做呢?

因此,我的问题是:

  • export(PACKAGE ...)只支持构建目录的注册的原因是什么?
  • 有没有办法在cmake包注册表中注册我的安装目录?
EN

回答 1

Stack Overflow用户

发布于 2021-02-28 18:41:07

不鼓励使用CMake包注册表,因为它很容易更改系统上其他构建的行为。来自最新文件 (重点雷):

在3.15版本中更改:默认情况下,export(PACKAGE)命令什么也不做(参见策略CMP0090),因为填充用户包注册表会在源和构建树之外产生影响。设置CMAKE_EXPORT_PACKAGE_REGISTRY变量以将生成目录添加到CMake用户包注册表。

如果这个问题是一个XY问题,一个更好的工作流就是选择一个通用的安装前缀,比如/path/to/prefix,然后通过-DCMAKE_PREFIX_PATH=/path/to/prefix将每个需要包的构建指向它。在转到下一个项目之前,先按依赖顺序构建每个项目,然后再构建cmake --install /path/to/build --prefix /path/to/prefix

这使您不必为每个依赖项设置_ROOT变量,因为您已经将它们全部安装到相同的前缀中。CMAKE_PREFIX_PATH也是CMake为初始化相应的CMake变量而读取的为数不多的环境变量之一,因此您可以在shell中设置它,以避免手动键入-D...。为了避免影响系统上的其他项目,像戴伦夫这样的东西可能对管理设置和取消设置CMAKE_PREFIX_PATH很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55660319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档