在CMake中处理多个FIND_PACKAGE调用

时间:2013-11-01 04:09:40

标签: c++ boost cmake point-cloud-library

我对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模块中的错误吗?

1 个答案:

答案 0 :(得分:2)

Boost的find包使用您选择的组件的库填充局部变量(Boost_LIBRARIES)。致电

非常安全
find_package(Boost REQUIRED COMPONENTS program_options)

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

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