gpt4 book ai didi

cmake - 在外部项目上使用 find_package()

转载 作者:行者123 更新时间:2023-12-04 08:02:43 27 4
gpt4 key购买 nike

我有一个名为 messages 的外部项目.我正在使用 ExternalProject_Add 来获取和构建项目。
如果我使用 find_package(messages REQUIRED)在顶级 CMakeLists.txt 中 cmake ..失败,因为它找不到软件包安装文件,这是合乎逻辑的,因为它们仅在 make 期间构建命令调用。
我不确定是否可以在 ExternalProjects 上使用 find_package()。如果是这样,请给我举个例子。
谢谢
巴努基兰

最佳答案

你误解了ExternalProject应该工作。你不能find_package(messages REQUIRED)因为它还没有建成。 ExternalProject仅创建构建子项目所需的构建步骤。
你有两个选择:

  • 使用add_subdirectoryFetchContent代替ExternalProject .在这种情况下,您不需要 find_package称呼。这有效地将子项目添加到主构建并导入子项目的目标。
  • 使用两个 ExternalProject来电:messages 1 个另一个是 main_project , 这取决于 messages .如果 messages使用 export(EXPORT)功能,可以点CMAKE_PREFIX_PATHmessages_ROOT到构建目录。否则,您需要运行 messages 的安装步骤。并在构建目录中设置安装前缀。然后 find_project(messages REQUIRED)调用内线main_project将会成功。这可能需要重新构建您的构建。

  • 一般来说, ExternalProject仅对定义 super 构建有用, super 构建是相互依赖的 CMake 构建链。 super 构建仅在您需要完全不同的配置时选项时才有用,例如不同的工具链(例如,您正在交叉编译,但需要代码生成器在构建机器上运行)。如果不是这样,请选择 FetchContentadd_subdirectory带有一个 git 子模块。
    最好使用 FetchContent使用 CMake 3.14+,因为它添加了 FetchContent_MakeAvailable减少样板的宏。
    文件:
    https://cmake.org/cmake/help/latest/module/ExternalProject.html
    https://cmake.org/cmake/help/latest/module/FetchContent.html

    关于cmake - 在外部项目上使用 find_package(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66372317/

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