总结一下混乱的GCC命令行参数,帮助写Makefile:
- 编译阶段
- 预编译E->生成汇编S(ccl)->生成机器码c(as)->链接生成目标程序(ld)
-
输出类型:
- -E 只执行到预编译
- -S 只执行到汇编阶段。生成汇编代码。
- -c 只执行到编译。输出目标文件。
- 空。生成链接目标代码。
- -o 指定输出文件名。
-
输入类型:
-
每个阶段可以接受之前阶段的中间结果(可跨越)。比如:
gcc -E hello.c -o hello.i gcc -S hello.i -o hello.s 顺序可以换: gcc -c -o hello.o hello.c
-
-
优化调试相关
- -g 生成调试信息
- -s 去掉调试和符号信息
-
-O[1 2 3..] 编译优化 - -W[all] 开启额外警告
-
链接相关:
- -l, 指定所使用到的函数库
- -L, 指定函数库所在的文件夹。
- -I, 指定头文件所在的文件夹
Bibliography:
[1] Linux平台gcc和动态共享库的基础知识, http://robbinfan.com/blog/9/gcc-linker-basic-usage