gcc [选项] [文件][-o 文件]
预处理:处理#开头的语句;
目标文件:源文件的二进制文件;
链接:目标文件与附加的目标文件进行链接;
文件后缀都是小写,预处理参数大写E,编译参数大写S,汇编参数小写c。
【单文件】
gcc test.c –o test
预处理: gcc –E test.c –o test.i
编译: gcc –S test.i –o test.s gcc –S test.c –o test.s
汇编: gcc –c test.s –o test.o gcc –c test.i –o test.o gcc –c test.c –o test.o
链接: gcc test.o –o test gcctest.s –o test gcc test.i –o test
优化: gcc –o1 test.c –o test(优化编译程序,级别1~3,级别越大效果越好编译时间越长)
【多文件】
一步gcc test1.c test2.c –o test
多步gcc –c test1.c –o test1.o gcc –c test2.c –o test2.o gcc test1.o test2.o –o test
【检错】
gcc –pedantic test.c –o test 检查不符合ANSI/ISOC标准的代码
gcc –Wall test.c –o test 产生尽量多的警告
gcc –Werror test.c –o test 所有警告之处停止编译,必须进行修改
【库文件链接】
Linux下先调用动态链接库(.so),若无则用静态库(.a),库文件后要跟具体文件名。
头文件include:-I /usr/…/include -I /usr/…/include
库文件lib:-L /usr/…/lib-lmysqlclient -… -L /usr/…/lib -lmysqlclient-…
强制使用静态链接库:-static
【gcc与g++区别】
gcc看.c文件为C文件,看.cpp文件为C++文件;g++看.c/.cpp都为C++文件。
gcc只能对C++文件进行编译,而不能链接,所以需采用g++链接。
C文件/C++文件中有无extern C,与使用gcc/g++并无任何关系。
故最方便的方式是C文件采用gcc编译链接,C++文件采用g++编译链接。
【其他】
-O/-O2:优化程序
-DMACRO等于#define MACRO