Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在CMake中处理多个FIND_包调用_C++_Boost_Cmake_Point Cloud Library - Fatal编程技术网

C++ 在CMake中处理多个FIND_包调用

C++ 在CMake中处理多个FIND_包调用,c++,boost,cmake,point-cloud-library,C++,Boost,Cmake,Point Cloud Library,我有一个关于CMake中的FIND_包函数的快速问题。我有一个利用点云库(PCL)的项目。PCL依赖于Boost,我的项目也依赖于Boost。因此,在我的CMakeLists.txt的顶部,我有以下内容: FIND_PACKAGE(Boost REQUIRED COMPONENTS program_options) # Preserve project Boost required libraries SET(Boost_PROJECT_LIBRARIES ${Boost_LIBRARIES}

我有一个关于CMake中的
FIND_包
函数的快速问题。我有一个利用点云库(PCL)的项目。PCL依赖于Boost,我的项目也依赖于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_选项库,PCL还需要其他几个选项库。当运行
FIND_PACKAGE(PCL…
时,它会用自己所需的库覆盖前面的
${Boost_LIBRARIES}
。我想出了一个办法来保存我的项目所需的Boost库,然后找到PCL包


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

Boost的find包使用所选组件的库填充局部变量(Boost_库)。打电话是绝对安全的

find_package(Boost REQUIRED COMPONENTS program_options)
(或其他)在你想使用它之前。这将确保为可执行文件正确填充变量


几个find模块采用的方法是使用定制的结果填充局部变量,以便在该目录/可执行文件中使用,同时将大部分繁重的工作推迟到全局缓存变量。Qt和6.0中新的VTK配置代码也有相同的功能,因此可以想象,根据当前范围内最近的find_包调用,您可以拥有几个不同版本的Boost_库。

根据我的经验,不幸的是,这是您最好的选择。除非您想修复
FindPCL.cmake
模块。同样,这是我的经验。如果没有
find_-package
-选项在两个
find_-package
命令(如设置或其他)之间更改,那么我认为您是对的-这是一个错误,为什么不复制FindPCL.cmake,“修复”它并使用cmake_模块路径让cmake找到您的版本?