[英]Handling multiple FIND_PACKAGE calls in CMake
我对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调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.