C/C++编译过程为:预处理,编译,汇编,链接
每个阶段都有对应的命令:
1) -E 仅对文件进行预处理
输入此命令后会将预处理结果显示在shell中,可将此命令与 > 命令结合,例如: g++ test.cpp -E > test.i,则将结果输入到test.i文件中.
2) -S 编译产生汇编文件后停止
该命令会生成.s后缀的汇编语言文件.
3) -c 汇编产生.o(obj)文件后停止
该命令会生成.o后缀的机器语言(二进制)文件.
4) 不加前面三个选项会默认将整个编译过程执行完,并生成可执行文件,名称默认为a.out.
其他重要命令:
1) -o 以后面所跟的字符串给生成的文件命名
例如:g++ test.cpp -o test.out,则将生成可执行文件test.out,后缀可以自己改.
2) -g 使生成的可执行文件可调试
使用gdb调试程序必须有此选项
3) -O[n] 对代码进行O[n]优化
-O2 即进行O2优化
4) -std=c++xx 使用c++xx标准
5) -L 指定库文件路径
6) -l(小写的L) 指定库文件
该命令会自动为其指定的名称加上lib的前缀和.a或.so的后缀,
例如:g++ test.cpp -lmylib
等价于 g++ test.cpp libmylib.a(so)
当静态库和动态库同时存在时优先使用动态库.
7) -I(大写的i) 指定头文件路径
8) -fPIC 生成位置无关的代码
会将代码中的相对位置变为绝对位置,用于创建动态库前的编译.
9) -shared 创建动态库
可与 -fPIC 一起使用,
例如:g++ sort1.cpp sort2.cpp -fPIC -shared -o libsort.so
等价于 g++ sort1.cpp sort2.cpp -fPIC -c
g++ sort1.o sort2.o -shared -o libsort.so
10) -Wall 打印警告信息
11) -w 关闭警告