gcc/g++是linux下常用的c/c++编译器,目的就是把test.c文件转换成可运行的文件。
用法:
gcc [可选项] 要编译的文件 [可选项] [目标文件]
比如:(-E和-o就是可选项)
gcc -E test.c -o test.i
------------------------------------------------------------------------------------------------------------
比如我们用vim写好了一个test.c文件
我们可以这样编译他:(这是简化的写法,复杂的4部在下面)
gcc test.c -o test
然后运行他:
./test
就可以显示运行的结果。
可选项的作用有很多,-o的意思是把左边文件输出到右边文件
其实gcc test.c -o test这句话有4个步骤:
我们知道c程序编译有4个步骤:预处理——编译——汇编——连接
- 预处理:进行宏替换
- 主要是处理:宏、文件包含、条件编译、去除注释等等。
- 预处理指令是以#开头的代码行
- 如:gcc -E test.c -o test.i
- -E:让gcc在预处理结束后停止编译
- -o是目标文件,“.i”是经过预处理的c源文件
- 编译:生成汇编
- 主要检查错误
- 只进行编译而不生成汇编代码
- 如:gcc -S test.i -o test.s
- 汇编:生成机器可识别代码
- 可以用-c看到汇编代码已转化为“.o”的二进制目标代码
- 如:gcc -c test.s -o test.o
- 连接:生成可执行文件或者库文件
- 如:gcc test.o -o test
- 之后就可以“./test”运行了
下面是全部可选项的介绍:
-E:只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里
-S:编译到汇编语言,不进行汇编和连接
-c:编译到目标代码
-o:输出到文件
-static:对生成的文件采用静态连接
-g:生成调试信息,GUN调试器可以用这个信息
-share:尽量使用动态库,使用生成文件比较小,但需要系统有动态库
-O0,O1,O2,O3(第一个是大写字母o,第二个是数字0123):编译器的4个优化选项级别,O0没有优化,O1缺省值,O3优化级别最高。
-w:不生成任何警告信息
-Wall:生成所有警告信息