CentOS7下通过Yum切换Boost至1.69版本用于C++/CMake编译
优雅切换CentOS 7上的Boost版本(CMake编译)
我来给你几个更规范、不折腾系统文件的方案,完美解决同时存在多版本Boost时CMake优先选旧版本的问题:
方案1:CMake命令行/脚本指定Boost路径(最推荐)
CMake官方提供了BOOST_ROOT(或Boost_ROOT)变量来指定Boost的安装路径,完全不需要修改系统的FindBoost.cmake或创建软链接。
方法A:编译时通过命令行参数指定
直接在cmake命令里加上路径参数,yum安装的boost169-devel通常会把文件放在/usr/lib64/boost169和/usr/include/boost169路径下:
cmake .. -DBOOST_ROOT=/usr/lib64/boost169 -DBoost_VERSION=1.69.0
加上Boost_VERSION可以强制CMake检查版本,避免误用到旧版本。
方法B:在CMakeLists.txt中固定配置
如果你的项目只需要Boost 1.69,可以直接在脚本里设置路径,确保所有开发者编译时都用指定版本:
# 先指定Boost 1.69的安装根目录 set(BOOST_ROOT "/usr/lib64/boost169") # 强制要求版本不低于1.69,找不到就报错 find_package(Boost 1.69 REQUIRED COMPONENTS filesystem regex) # 替换成你项目需要的组件
方案2:通过环境变量全局临时切换
如果不想每次cmake都加参数,可以临时设置环境变量,让CMake自动读取:
# 临时生效,当前shell会话内有效 export BOOST_ROOT=/usr/lib64/boost169 export Boost_INCLUDE_DIR=/usr/include/boost169 export Boost_LIBRARY_DIR=/usr/lib64/boost169 # 然后正常执行编译流程 cmake .. && make
如果需要长期默认用1.69,可以把上述export命令加到~/.bashrc或~/.zshrc里,需要切换回旧版本时,临时执行unset BOOST_ROOT Boost_INCLUDE_DIR Boost_LIBRARY_DIR即可。
方案3:利用CentOS软件集合(SCL)隔离环境
如果你的boost169-devel是通过SCL仓库安装的,可以直接启用对应的软件集合环境,自动切换到指定版本:
# 启用Boost 1.69的SCL环境,当前shell生效 scl enable boost169 bash # 之后在这个shell里编译,CMake会自动识别到1.69版本 cmake .. && make
这个方案的好处是完全隔离不同版本的依赖,不会影响系统全局环境,适合同时维护多个依赖不同Boost版本的项目。
这些方案都比修改系统CMake脚本或创建软链接更优雅,既不会破坏系统默认配置,又能精准控制每个项目使用的Boost版本。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

