CMake变量值修改位置及Ubuntu 20.04下指定PCL 1.9版本的配置咨询
其实修改CMake变量的值有好几种常见方式,取决于你操作的阶段和变量类型:
命令行临时设置:在执行
cmake命令时,直接通过-D变量名=目标值的方式指定,比如要把构建类型设为Release:cmake .. -DCMAKE_BUILD_TYPE=Release这种方式是临时生效,不会修改CMake的缓存文件,下次构建如果不指定会回到默认值。
在CMakeLists.txt中直接配置:
- 如果你是修改自己定义的变量,直接用
set(变量名 目标值)即可,比如:set(MY_CUSTOM_VAR "hello") - 如果是修改系统或第三方库的缓存变量(比如由
find_package生成的变量),需要加上FORCE关键字强制覆盖缓存,比如:set(PCL_DIR "/usr/lib/x86_64-linux-gnu/cmake/PCL-1.9" CACHE PATH "Path to PCL 1.9 config" FORCE)
注意要把这个设置放在
find_package相关语句之前,这样才会生效。- 如果你是修改自己定义的变量,直接用
通过CMake GUI修改:如果你习惯可视化操作,打开CMake GUI后,加载项目的源码和构建目录,点击「Configure」,之后在搜索框里找到要修改的变量,直接修改值,再点击「Configure」和「Generate」即可,适合不太熟悉命令行的场景。
首先说下PCL_INCLUDE_DIRS的来源:这个变量是PCL的CMake配置模块(通常是PCLConfig.cmake)在执行find_package(PCL)时自动生成的,它的值是从对应版本PCL的配置文件里读取的——不同版本的PCL会在不同路径下存放自己的配置文件。
在你的Ubuntu 20.04系统里,PCL 1.9的配置文件路径大概分两种情况:
- 如果是通过apt包管理器安装的,路径通常是
/usr/lib/x86_64-linux-gnu/cmake/PCL-1.9/ - 如果是源码编译安装的,路径一般是
/usr/local/lib/cmake/PCL-1.9/
要让PCL_INCLUDE_DIRS指向1.9版本,有三种可靠的方法:
命令行指定PCL_DIR:在执行cmake构建时,直接指定PCL 1.9的配置文件路径,比如:
cmake .. -DPCL_DIR=/usr/lib/x86_64-linux-gnu/cmake/PCL-1.9这样CMake会优先使用你指定的这个路径下的PCL配置,自动把
PCL_INCLUDE_DIRS设置为1.9版本的头文件路径。在CMakeLists.txt中提前设置:在
find_package(PCL REQUIRED)语句之前,手动设置PCL_DIR变量,比如:# 先指定PCL 1.9的配置路径 set(PCL_DIR "/usr/local/lib/cmake/PCL-1.9") # 再查找PCL包 find_package(PCL REQUIRED) include_directories(${PCL_INCLUDE_DIRS})这种方式会把版本指定固化在CMakeLists.txt里,团队协作时更方便统一环境。
通过环境变量临时切换:在终端里先导出
PCL_DIR环境变量,再运行cmake:export PCL_DIR=/usr/lib/x86_64-linux-gnu/cmake/PCL-1.9 cmake ..这种方式适合临时切换版本,不会影响其他项目。
最后可以验证下是否生效:在CMakeLists.txt里添加一行输出语句:
message(STATUS "当前使用的PCL头文件路径:${PCL_INCLUDE_DIRS}")
执行cmake时,看终端输出的路径是不是指向PCL 1.9的头文件目录(比如/usr/include/pcl-1.9/)就可以确认了。
内容的提问来源于stack exchange,提问作者surajj4837

