GCC编译选项参数介绍

        gcc和g++分别是gnu的c和c++编译器,下面是整理的常用编译选项参数:

#(1). -x: 设定文件所使用的语言,使文件后缀名无效,如下,执行完后生成test.o
gcc -c -x c++ test.jpg
#(2). -c: 只编译生成目标文件即*.o,只编译不链接生成可执行文件,如下,执行完后生成test.o
gcc -c test.cpp
#(3). -S: 把文件编译成为汇编源文件,如下,执行完后生成test.s
gcc -S test.cpp
#(4). -o: 指定生成的可执行文件,输出文件名称,gcc编译出来的文件缺省的是a.out,如下,执行完后生成test执行文件
gcc -o test -c test.cpp
#(5). -ansi: 关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏),仅支持ANSI标准的C语法,如下
gcc -ansi -c test.cpp
#(6). -fno-asm: 禁止将asm,inline和typeof用作关键字,如下
gcc -fno-asm -c test.cpp
#(7). -funsigned-char或-fno-signed-char: 对char类型进行设置,将char类型设置成unsigned char,如下
gcc -funsigned-char -c test.cpp
gcc -fno-signed-char -c test.cpp
#(8). -fsigned-char或-fno-unsigned-char: 对char类型进行设置,将char类型设置成signed char,如下
gcc -fsigned-char -c test.cpp
gcc -fno-unsigned-char -c test.cpp
#(9). -include file_name: 在编译test.cpp文件需要aa.hpp文件的时候使用,而此时test.cpp文件中并没有#include "../aa.hpp",相当于在代码中使用#include "../aa.hpp",如下
gcc -c test.cpp -include ../aa.hpp
#(10). -Dmacro_name: 相当于C语言中的#define macro_name,如下
gcc -DTEST_MAIN -c test.cpp
#(11). -Dmacro_name=value: 相当于C语言中的#define macro_name value,如下
gcc -DTEST_MAIN=2 -c test.cpp
#(12). -Umacro_name: 相当于C语言中的#undef macro_name,如下
gcc -Umax -c test.cpp
#(13). -Idir_name: 在test.cpp文件中#include "aa.hpp"文件,而aa.hpp又没有和test.cpp在同一目录下时使用,gcc/g++会到-I指定的目录下查找,即指定额外的头文件搜索路径,如下
gcc -c test.cpp -I../
#(14). -dirafter dir_name: 如果-I指定的目录查找失败,将到这个目录里查找,如下
gcc -c test.cpp -I../../ -idirafter ../
#(15). -nostdinc: 使编译器不再系统缺省的目录里查找头文件,一般和-I一起使用,明确限定头文件的位置
gcc -c test.cpp -I../ -nostdinc
#(16). -C: 在预处理的时候,不删除注释信息,如下
gcc -C -c test.cpp -I../
#(17). -M: 生成文件关联信息,目标文件依赖的所有文件,如下
gcc -M -c test.cpp -I../
#(18). -MM: 生成文件关联信息,与-M相似,但是它将忽略由#include <file>造成的依赖关系,如下
gcc -MM -c test.cpp -I../
#(19). -Wa,option: 此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序
#(20). -Wl.option: 此选项传递option给链接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会链接程序
#(21). -llibrary_name: 指定链接时搜索指定的库,如下
gcc -c test.cpp -I../ -lpthread
#(22). -Ldir: 指定额外的库搜索路径,如下
gcc -c test.cpp -I../ -L../
#(23). -O0或-O1或-O2或-O3:编译器优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高,如下
gcc -O3 -c test.cpp -I../ -L../
#(24). -g: 指示编译器在编译的时候产生调试信息,如下
gcc -O3 -g -c test.cpp -I../ -L../
#(25). -gstabs: 此选项以stabs格式生成调试信息,但是不包括gdb调试信息,如下 
gcc -O3 -gstabs -c test.cpp -I../ -L../
#(26). -gstabs+: 此选项以stabs格式生成调试信息,并且包含仅供gdb使用的额外调试信息,如下
gcc -O3 -gstabs+ -c test.cpp -I../ -L../
#(27). -ggdb: 此选项将尽可能的生成gdb可以使用的调试信息,如下
gcc -O3 -ggdb -c test.cpp -I../ -L../
#(28). -static: 此选项将禁止使用动态库,一般编译出来的文件比较大,不需要什么动态链接库就可以运行,如下
cc -static -o test -c test.cpp -I../
#(29). -shared: 此选项将尽可能使用动态库,一般编译出来的文件比较小,如下
gcc -shared -o test -c test.cpp -I../
#(30). -tradional: 试图让编译器支持传统的C语言特性,如下
gcc -traditional -o test -c test.cpp -I../
#(31). -E: 预编译后停下来,生成后缀为*.i的预编译文件,如下
gcc -E -o test.i test.cpp -I../
#(32). -w: 不生成任何警告信息,如下
gcc -w -o test -c test.cpp -I../
#(33). -Wall: 生成所有警告信息,如下
gcc -Wall -o test -c test.cpp -I../
#(34). -pedantic: 当gcc在编译不符合ANSI/ISO C语言标准的源代码时,将产生相应的警告信息,如下
gcc -pedantic -o test test.cpp
#(35). -Werror: 要求gcc将所有的警告信息当成错误进行处理,如下
gcc -Werror -o test test.cpp
#(36). -Wcast-align: 当源程序中地址不需要对齐的指针指向一个地址需要对齐的变量地址时则产生一个警告,如下
gcc -Wcast-align -o test test.cpp
#(37). -p或-pg: 会将剖析(profiling)信息加入到最终生成的二进制文件中,剖析信息对于找出程序的性能瓶颈很有帮助,如下
gcc -p -o test test.cpp
gcc -pg -o test test.cpp
#(38). -save-temps: 保存编译过程中生成的一些中间文件,如test.s, test.ii,如下
gcc -save-temps -o test test.cpp
#(40). -pipe: 使用管道代替编译中临时文件,如下
gcc -pipe -o test test.cpp
#(41). -ftime-report: 统计编译消耗的时间并显示报告,如下
gcc -ftime-report -o test test.cpp
#(42). -fmem-report: 显示所有的静态内存分配,如下
gcc -fmem-report -o test test.cpp
#(43). -march: 指定目标架构选项,如下
gcc -march=native -Q --help=target | grep march
#(44). -fpic或-fPIC: 如果支持目标机,编译器就生成位置无关目标码,适用于共享库,如下
gcc -fpic -o test test.cpp
#(45). -fno-rtti: 禁用运行时类型信息,如下
gcc -fno-rtti -o test test.cpp
#(46). -fno-exceptions: 禁用异常机制,如下
gcc -fno-exceptions -o test test.cpp

        更详细的GCC编译选项参数介绍可以参考官网: https://gcc.gnu.org/onlinedocs/gcc/

        GitHub: https://github.com/fengbingchun/Linux_Code_Test  

猜你喜欢

转载自blog.csdn.net/fengbingchun/article/details/80960916