gpt4 book ai didi

c++ - 在 CMake 中处理多个 FIND_PACKAGE 调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:52 25 4
gpt4 key购买 nike

我有一个关于 CMake 中的 FIND_PACKAGE 函数的快速问题。我有一个利用点云库 (PCL) 的项目。 PCL 依赖于 Boost,我的项目也是如此。因此,在我的 CMakeLists.txt 顶部,我有以下内容:

FIND_PACKAGE(Boost REQUIRED COMPONENTS program_options)

# Preserve project Boost required libraries
SET(Boost_PROJECT_LIBRARIES ${Boost_LIBRARIES})

FIND_PACKAGE(PCL 1.6 REQUIRED COMPONENTS common search)

我的项目使用了 Boost.program_options 库,PCL 还需要其他几个。当 FIND_PACKAGE(PCL ...) 运行时,它会用自己所需的库覆盖之前的 ${Boost_LIBRARIES}。我想出了一个解决方法来保存我的项目所需的 Boost 库,然后找到 PCL 包。

我想问 CMake 专家,在 CMake 中有没有更好的方法来处理这类事情?或者,这可能是 FindBoost.cmake 或 FindPCL.cmake 模块中的错误吗?

最佳答案

Boost 的查找包使用您选择的组件的库填充局部变量 (Boost_LIBRARIES)。打电话绝对安全

find_package(Boost REQUIRED COMPONENTS program_options)

(或其他任何东西)在你想使用它之前。这将确保为您的可执行文件正确填充变量。

一些查找模块采用了使用自定义结果填充局部变量的方法,以便在该目录/可执行文件中使用,同时将大部分繁重的工作推迟到全局缓存变量。 Qt 和 6.0 中新的 VTK 配置代码做同样的事情,所以你可以想象有几个不同版本的 Boost_LIBRARIES 取决于当前范围内最近的 find_package 调用。

关于c++ - 在 CMake 中处理多个 FIND_PACKAGE 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720639/

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