c – 在CMake中处理多个FIND_PACKAGE调用

我有一个关于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的find包使用您选择的组件的库填充局部变量(Boost_LIBRARIES).打电话是绝对安全的

find_package(Boost REQUIRED COMPONENTS program_options)

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

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

点赞