C++程序编译与相关选项
g++是GNU C++编译器,是Linux环境下编译C++程序最常用的工具。
C++程序从源代码到可执行文件需要经历以下阶段:
#include、#define 等指令
# 最基本的编译命令
g++ main.cpp
# 指定输出文件名
g++ main.cpp -o main
# 编译并立即运行
g++ main.cpp -o main && ./main
# 编译多个文件
g++ main.cpp utils.cpp -o program
# 只编译不链接(生成目标文件)
g++ -c main.cpp # 生成 main.o
g++ -c utils.cpp # 生成 utils.o
g++ main.o utils.o -o program
# 包含警告、调试信息、C++17标准
g++ -Wall -Wextra -g -std=c++17 main.cpp -o main
# 最高优化、C++17标准
g++ -O3 -std=c++17 main.cpp -o main
# 编译所有.cpp文件
g++ -std=c++17 -O3 -Wall *.cpp -o program
# 或者分别编译再链接
g++ -std=c++17 -c main.cpp
g++ -std=c++17 -c solution.cpp
g++ -std=c++17 -c tools.cpp
g++ main.o solution.o tools.o -o program
尝试输入:g++ main.cpp -Wall 或 g++ main.cpp -O2
警告不会阻止编译,但建议修复!使用 -Werror 可以将警告转为错误。
| 级别 | 说明 | 适用场景 |
|---|---|---|
| -O0 | 不优化 | 开发调试(最快编译,最慢执行) |
| -O1 | 基本优化 | 需要速度但体积敏感 |
| -O2 | 推荐优化 | 大多数情况(平衡速度和体积) |
| -O3 | 最高优化 | NOI竞赛(追求最快速度) |
# 调试版本
alias debug="g++ -Wall -Wextra -g -std=c++17 -DDEBUG"
# 提交版本
alias submit="g++ -Wall -O3 -std=c++17 -DNDEBUG"
# 使用
debug main.cpp -o main # 调试编译
submit main.cpp -o main # 提交编译
CXX = g++
CXXFLAGS = -std=c++17 -O2 -Wall
main: main.cpp
$(CXX) $(CXXFLAGS) main.cpp -o main
clean:
rm -f main main.o
保存为 Makefile,然后使用 make 编译。