GCC 参数详解
编译步骤
gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:
1、预处理,生成 .i 的文件[预处理器cpp]
2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
4、连接目标代码, 生成可执行程序 [链接器ld]
编译命令参数
-x language filename
例:gcc -x c test1.c 生成 a.out 文件
-x none filename
让gcc根据文件名后缀,自动识别文件类型
例:gcc -x c hello.pig -x none hello2.c * 生成 a.out 文件
-o
制定目标名称, 默认的时候, gcc 编译出来的文件是 a.out
例:gcc -o test.exe test.c /gcc test.c -o test.exe 生成 test.exe 文件
-g
只是编译器,在编译的时候,产生调试信息
例:gcc -g test.c /gcc -g test.c -o test.out
生成的可执行文件带有调试信息可以使用gdb工具调试
-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
例:gcc -c test.c 生成 test.o 文件
-S
只激活预处理和编译,就是指把文件编译成为汇编代码。
例:gcc -S test.c 生成 test.s 文件
-E
只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面
例:gcc -E test.c > test.i /gcc -E -o test.i test.c 保存 test.i 文件
gcc -E hello.c | more
gcc 命令的常用选项
选项 | 解释 |
---|---|
-ansi | 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。 |
-c | 只编译并生成目标文件。 |
-DMACRO | 以字符串"1"定义 MACRO 宏。 |
-DMACRO=DEFN | 以字符串"DEFN"定义 MACRO 宏。 |
-E | 只运行 C 预编译器。 |
-g | 生成调试信息。GNU 调试器可利用该信息。 |
-IDIRECTORY | 指定额外的头文件搜索路径DIRECTORY。 |
-LDIRECTORY | 指定额外的函数库搜索路径DIRECTORY。 |
-lLIBRARY | 连接时搜索指定的函数库LIBRARY。 |
-m486 | 针对 486 进行代码优化。 |
-o FILE | 生成指定的输出文件。用在生成可执行文件时。 |
-O0 | 不进行优化处理。 |
-O 或 -O1 | 优化生成代码。 |
-O2 | 进一步优化。 |
-O3 | 比 -O2 更进一步优化,包括 inline 函数。 |
-shared | 生成共享目标文件。通常用在建立共享库时。 |
-static | 禁止使用共享连接。 |
-UMACRO | 取消对 MACRO 宏的定义。 |
-w | 不生成任何警告信息。 |
-Wall | 生成所有警告信息。 |