CMake编译报错不识别-std=c++20选项 如何指定GCC版本
你的判断是对的,这个报错的根因就是当前默认调用的GCC 9不支持-std=c++20编译选项:GCC从11版本开始才正式支持C++20标准的-std=c++20参数,9/10版本仅支持实验性的-std=c++2a,和报错提示完全吻合。你系统已经安装了gcc-11,不需要修改项目源码里的CMakeLists.txt或者生成的Makefile,按以下步骤操作即可:
前置操作:清理旧的CMake缓存
CMake会在首次配置时缓存检测到的编译器路径,直接改配置不会生效,必须先清空之前的构建目录内容:
rm -rf ./[binary_dir]/*
推荐方案:CMake配置阶段指定编译器
在首次生成构建文件时,通过参数直接指定C/C++编译器路径,这是最稳定、不会影响系统全局配置的方案:
cmake -S . -B ./[binary_dir] \ -DCMAKE_C_COMPILER=/usr/bin/gcc-11 \ -DCMAKE_CXX_COMPILER=/usr/bin/g++-11
配置完成后正常执行编译命令即可:
cmake --build ./[binary_dir]/
备选方案:通过环境变量指定编译器
也可以在执行cmake配置前导出CC/CXX环境变量,CMake会自动读取这两个变量选择编译器:
export CC=/usr/bin/gcc-11 export CXX=/usr/bin/g++-11 cmake -S . -B ./[binary_dir]
配置完成后正常编译即可。
注意避坑
- 不要直接修改
/usr/bin/gcc的默认软链接指向gcc-11,会破坏系统工具链依赖,后续系统更新、安装软件包可能出现异常。 - 如果切换gcc-11后仍然在编译bzip2的C源文件(
bcompress.c)时报参数错误,是项目配置误将C20标准选项加到了全局C编译参数里,临时解决可以在cmake配置时追加-DCMAKE_C_FLAGS="-Wno-error"参数忽略该警告,或者修改对应子目录的编译选项配置,移除C编译流程里的C标准参数。
内容的提问来源于stack exchange,提问作者fugmug
相关产品推荐
相关产品推荐

