基础必学篇
最基础的编译命令
bash
g++ hello.cpp -o hello
就像做菜要先放盐一样,这最基础的命令是所有编译的基础。
优化级别参数
bash
O0 - 不优化(调试用)
g++ -O0 hello.cpp -o hello
O1 - 基础优化
g++ -O1 hello.cpp -o hello
O2 - 中等优化(推荐)
g++ -O2 hello.cpp -o hello
O3 - 高级优化(可能有bug)
g++ -O3 hello.cpp -o hello
Os - 优化体积
g++ -Os hello.cpp -o hello
Ofast - 极速优化(不保证准确)
g++ -Ofast hello.cpp -o hello
案例:
小明写了个计算程序,用-O0调试时发现数组越界,用-O2编译后居然跑得更快了!这就是优化的魔力。
️ 调试神器篇
调试信息相关
bash
生成调试信息(GDB必备)
g++ -g hello.cpp -o hello
生成详细的调试信息
g++ -ggdb hello.cpp -o hello
显示编译过程
g++ -v hello.cpp -o hello
显示详细编译信息
g++ -Wall -Wextra hello.cpp -o hello
警告信息
bash
开启所有警告
g++ -Wall -Wextra -Wpedantic hello.cpp -o hello
特殊警告
g++ -Werror hello.cpp -o hello # 警告变错误
g++ -Wno-unused-variable hello.cpp -o hello # 忽略未使用变量警告
建议: 每个程序员都应该养成"开启所有警告"的习惯,就像医生检查身体一样,不放过任何细节。
链接和库篇
库相关参数
bash
链接数学库
g++ -lm hello.cpp -o hello
链接多线程库
g++ -lpthread hello.cpp -o hello
链接动态库
g++ -L/usr/lib -lmylib hello.cpp -o hello
指定头文件路径
g++ -I/usr/include hello.cpp -o hello
指定库文件路径
g++ -L/usr/lib -lmylib hello.cpp -o hello
案例: 小李写了个多线程程序,编译时报错"未定义引用",原来是忘记加-lpthread参数。就像开车没系安全带,系统直接报错!
静态链接 vs 动态链接
bash
静态链接(体积大但独立)
g++ -static hello.cpp -o hello
动态链接(体积小但依赖系统)
g++ hello.cpp -o hello
代码风格篇
语言标准
bash
C++11标准
g++ -std=c++11 hello.cpp -o hello
C++14标准
g++ -std=c++14 hello.cpp -o hello
C++17标准
g++ -std=c++17 hello.cpp -o hello
C++20标准
g++ -std=c++20 hello.cpp -o hello
最新标准
g++ -std=gnu++20 hello.cpp -o hello
代码格式
bash
显示宏展开
g++ -E hello.cpp -o hello.i
显示汇编代码
g++ -S hello.cpp -o hello.s
生成中间文件
g++ -c hello.cpp -o hello.o
高级技巧篇
性能分析参数
bash
生成性能分析数据
g++ -pg hello.cpp -o hello
指定输出目录
g++ -o /tmp/hello hello.cpp
使用特定架构
g++ -march=native hello.cpp -o hello
指定CPU类型
g++ -mcpu=cortex-a72 hello.cpp -o hello
内存相关
bash
指定栈大小
g++ -Wl,-stack_size,0x1000000 hello.cpp -o hello
优化内存使用
g++ -fomit-frame-pointer hello.cpp -o hello
启用内存检查
g++ -fsanitize=address hello.cpp -o hello
实战应用篇
完整编译示例
bash
完整的生产环境编译命令
g++ -O2 -Wall -Wextra -std=c++17 \
-pthread -lm -lssl -lcrypto \
-g -pg -fPIC \
-I/usr/include/openssl \
-L/usr/lib/x86_64-linux-gnu \
main.cpp -o myprogram
调试版本
g++ -O0 -g -Wall -Wextra -std=c++17 \
-fsanitize=address \
main.cpp -o debug_program
Makefile配合使用
makefile
CXX = g++
CXXFLAGS = -O2 -Wall -Wextra -std=c++17
LDFLAGS = -pthread -lm
program: main.o utils.o
$(CXX) $(LDFLAGS) -o program main.o utils.o
main.o: main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp
utils.o: utils.cpp
$(CXX) $(CXXFLAGS) -c utils.cpp
实用建议篇
新手建议
从简单开始:先学g++ hello.cpp -o hello
开启警告:永远用-Wall -Wextra
调试模式:开发时用-g -O0
生产环境:用-O2 -DNDEBUG
老手进阶
性能优化:-Ofast和-march=native
安全检查:-fsanitize=address
代码质量:-Werror强制错误处理
链接优化:合理使用静态/动态链接
常见问题解决
bash
未定义引用错误 → 检查库参数
g++ -lpthread hello.cpp -o hello
头文件找不到 → 检查-I参数
g++ -I/usr/local/include hello.cpp -o hello
编译速度慢 → 用-O1或-O2
g++ -O1 hello.cpp -o hello
特别提醒
记住这10个关键参数:
-Wall -Wextra - 开启所有警告
-g - 调试信息
-O2 - 优化级别
-std=c++17 - C++标准
-pthread - 多线程支持
-lm - 数学库
-I/path - 头文件路径
-L/path - 库文件路径
-o name - 输出文件名
-c - 只编译不链接
就像做菜一样,调料要放对了才好吃!
---
本指南涵盖了从入门到精通的所有G++参数,记住:不是参数越多越好,而是要用对参数!
扬帆配资-扬帆配资官网-配资公司行情-股票配资规则提示:文章来自网络,不代表本站观点。