| 语言标准 |
--std=c++17 |
设置使用的 C++ 语言标准。 |
| 通用告警 |
-Wall -Wextra -Wfloat-equal -Wshadow -Wformat=2 |
启用常见的编译器警告。 |
| 通用告警 |
-Werror=return-type |
将返回类型相关的警告视为错误。gcc10优化激进,不消除此类告警运行时必然跑飞。 |
| 优化 |
-O1 或 -O2 |
-O2 约比 -O1 快十分之一,-O3 可能不如 -O2。 |
| 优化 |
-fno-strict-aliasing |
禁用严格的别名规则,防止潜在的优化错误。 |
| 优化 |
-DNDEBUG |
禁用断言(通常用于发布版本)。 |
| 架构约定 |
-fsigned-char |
将 char 类型设为有符号。 |
| 架构约定 |
-fvisibility=hidden |
默认隐藏符号,减少符号导出,提升安全性。 |
| 架构约定 |
-pthread |
启用多线程支持(同时影响编译和链接阶段)。 |
| 安全 |
-D_FORTIFY_SOURCE=2 |
启用额外的编译时和运行时安全检查。 |
| 安全 |
-fstack-protector-strong |
启用强栈保护,防止栈溢出攻击。 |
| 可维护 |
-g |
生成调试信息。 |
| 可维护 |
-fno-omit-frame-pointer |
保留帧指针,便于调试和性能分析。 |
| BEP |
-ffile-prefix-map=*=* |
用于构建环境路径映射。 |
| BEP |
-fno-canonical-system-headers |
微服务通过标记依赖为系统库来抑制外部告警时需要开启。 |
| 可维护 |
-femit-class-debug-always |
对于外部类型也生成调试信息,但是该选项在 Clang 系工具中会报错。 |
| 告警 |
-isystem |
抑制三方组件告警,最好是配合 -fno-canonical-system-headers 避免 BEP 问题。 |
| 告警 |
-Werror -Wno-error=cpp |
如果没有开启 -isystem,请勿在正式版本构建中开启,这样升级依赖可能导致版本构建失败。 |
| 安全 |
-Wframe-larger-than=4096 |
警告栈帧大小超过 4096 字节,提示可能的栈重叠风险。 |
| 安全 |
-fstack-check |
运行时防止栈重叠,对于效率有一定影响。 |
| 安全 |
-ftrapv |
检查有符号整型溢出,对效率影响较大。 |