如何永久禁用C++11编译器扩展警告(Apple Clang环境)
永久禁用Apple Clang的C++11扩展特定警告方案
针对你用2022款MacBook(Apple clang 14.0.0)开发ASCII纸牌游戏的场景,不想全关警告但要永久屏蔽-Wc++11-extensions这类提示,给你几个可行的方法:
1. 全局生效:配置shell环境变量
M系列Mac默认用zsh,直接修改shell配置文件,让clang++每次编译自动带上禁用参数:
- 打开终端,编辑
~/.zshrc:nano ~/.zshrc - 添加一行:
export CXXFLAGS="$CXXFLAGS -Wno-c++11-extensions" - 保存后执行
source ~/.zshrc,之后编译就不会再弹这个警告了。
2. 项目级生效:修改构建配置
如果只想让你的纸牌游戏项目生效,不想影响其他编译:
用Makefile的情况
在项目的Makefile里添加:
CXXFLAGS += -Wno-c++11-extensions
用CMake的情况
在CMakeLists.txt里添加:
add_compile_options(-Wno-c++11-extensions)
3. 全局配置文件:让Clang自动读取参数
创建Clang的用户配置文件,所有编译都会自动应用该设置:
- 先创建目录(如果不存在的话):
mkdir -p ~/.config/clang - 在
~/.config/clang/config文件中写入:-Wno-c++11-extensions
之后不管用什么方式调用Clang,都会自动加载这个参数。
更推荐的方式:直接指定C++标准
既然你不需要兼容12年以上的老环境,不如直接指定用C++11或更高标准编译,从根源上消除这个警告:
- 全局配置的话,在
~/.zshrc里添加:export CXXFLAGS="$CXXFLAGS -std=c++17" # 也可以选c++11/c++20,看你需求 - 项目级的话,Makefile加
CXXFLAGS += -std=c++17,CMake加set(CMAKE_CXX_STANDARD 17)
这样range-based for loop这类特性就会被当作标准语法,不会再触发“扩展”警告。
内容的提问来源于stack exchange,提问作者the-baby-is-you
相关产品推荐
相关产品推荐

