6

FIND_PACKAGE我有一个关于CMake 中的函数的快速问题。我有一个利用点云库(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 模块中的错误吗?

4

1 回答 1

2

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

find_package(Boost REQUIRED COMPONENTS program_options)

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

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

于 2013-11-01T20:52:02.827 回答