gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:51:43 27 4
gpt4 key购买 nike

假设我已经写了一个库 <mylib>我可以通过 cmake 构建安装。而且我还有一个 <mylib>Config.cmake可以定位所有必要文件(库、标题等)并导出库目标的文件。

如果我想通过 find_package(...) 使用该库, cmake 需要知道配置文件的位置。我知道每次使用库构建项目时我都可以通过它,或者我可以(对于 cmake 3.13 和更新版本)指向 <mylib>_ROOT环境变量给它。

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

因此我的问题:

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

    不鼓励使用 CMake 包注册表,因为它可能会更改系统上其他构建的行为。来自 latest documentation (强调我的):

    Changed in version 3.15: By default the export(PACKAGE) command does nothing (see policy CMP0090) because populating the user package registry has effects outside the source and build trees. Set the CMAKE_EXPORT_PACKAGE_REGISTRY variable to add build directories to the CMake user package registry.


    在某种程度上,这个问题是一个 XY problem ,更好的工作流程是简单地选择一个通用的安装前缀,比如 /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...手动。为避免影响系统上的其他项目,例如 direnv可能有助于管理设置和取消设置 CMAKE_PREFIX_PATH .

    关于cmake - 如何在 cmake 包注册表中注册安装目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55660319/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com