我有一个名为 的外部项目messages。我正在使用ExternalProject_Add 来获取和构建项目。
如果我find_package(messages REQUIRED)在顶级 CMakeLists.txt 中使用cmake ..,则会失败,因为它找不到包安装文件,这是合乎逻辑的,因为它们仅在make命令调用期间构建。
我不确定是否有办法在外部项目上使用 find_package() 。如果是这样,请给我举一个例子。
谢谢巴努基兰
Ale*_*ing 13
您误解了ExternalProject应该如何工作。你不能 find_package(messages REQUIRED),因为它还没有建成。ExternalProject仅创建构建子项目所需的构建步骤。
您有两个选择:
add_subdirectory或FetchContent代替ExternalProject. 在这种情况下,您不需要打电话find_package。这有效地将子项目添加到主构建中并导入子项目的目标。ExternalProject调用:一个 for messages,另一个 for main_project,这取决于messages。如果messages使用该export(EXPORT)功能,您可以指向CMAKE_PREFIX_PATH或messages_ROOT到构建目录。否则,您需要运行安装步骤messages并在构建目录中设置安装前缀。然后find_project(messages REQUIRED)里面调用main_project就成功了。这可能需要重新构建您的构建。一般来说,ExternalProject仅对定义超级构建有用,超级构建是相互依赖的 CMake 构建链。超级构建仅在您需要完全不同的配置时选项(例如不同的工具链)时才有用(例如,您正在交叉编译,但需要代码生成器在构建机器上运行)。如果不是这种情况,请更喜欢FetchContent或add_subdirectorygit 子模块。
最好FetchContent与 CMake 3.14+ 一起使用,因为它添加了FetchContent_MakeAvailable减少样板文件的宏。
文件:
https://cmake.org/cmake/help/latest/module/ExternalProject.html https://cmake.org/cmake/help/latest/module/FetchContent.html
| 归档时间: |
|
| 查看次数: |
5817 次 |
| 最近记录: |