- -x language filename:设定编译所用的语言。通常编译时没有这个选项就会按照文件后缀名来判断,有这个选项则会强制使用某种语言来编译。
选项有:c, objective-c, c-header, c++, cpp-output, assembler, 以及 assembler-with-cpp e.g. gcc -x c hello.pig特殊用法: -x none filename:关掉上一个-x选项, e.g. gcc -x c hello.pig -x none hello2.c
- -c filename:只激活预处理,编译和汇编,也就是只把文件编译成obj。
e.g.
gcc -c hello.c
将只会生成hello.o
- -S filename:只激活预处理和编译,即只把文件变成汇编代码。
e.g.
gcc -S hello.c
将只会生成hello.s格式的 汇编代码,可以用文本编辑器查看。
- -E filename > output file:只激活预处理,不主动生成文件,需要手动输出。
e.g.
gcc -E hello.c > hello.txt
或
gcc -E hello.c | more
- -o output_filename:制定生成文件名。
e.g.
gcc -o hello.so hello.c
- -pipe:用管道代替编译过程中生成的临时文件。在使用非gnu汇编工具时,这个命令可能导致问题。
e.g.
gcc -pipe -o hello.so hello.c
- -include file:包含某个文件中没有包含,但是编译时需要用到的文件,其实就跟#include <...>是一样的,只不过是写在了编译命令行中
e.g.
gcc hello.c -include /root/hello.h
- -I[dir]: 对于被编译文件中的#include "...",优先在dir中查找;如果没找到,才会回到default目录中去查找
-I-:取消上一个命令的功能,所以这个flag通常接在-Idir后使用;
- -C:在预处理时,不删除主食信息,通常和-E一起用于分析程序
- -M:生成文件关联信息,包含目标文件依赖的所有源代码。
-MD:和-M相同,只是将信息输出到一个.d文件中
-MM:和-M相同,但是它将忽略由#include造成的依赖关系。
-MMD:和-MM相同,只是将信息输出到一个.d文件中
- -Wa,options:传递options给汇编程序,options之间用逗号分隔
-Wl,options:传递options给连接程序,options之间用逗号分隔
- -l[library_name]:制定编译时用到的库文件。
- -L[dir]:制定编译时搜索库的路径。否则编译器将只在标准库路径中查找
- -O0/-O1/-O2/-O3:编译器的四个优化级别,O0无优化,O3优化级别最高
- -static:禁止使用动态链接库,所以编译出来的结果都很大,但不需要动态链接库就可以直接运行。
-shared:尽量调用动态链接库,所以编译出来的文件比较小,但需要从系统中调用各种动态链接库。
-fpic:编译器就生成位置无关目标码,适用于-static-fPIC:编译器就输出位置无关目标码,适用于-shared
- -m64/-m32:设置编译环境为64位或32位。
- -Wall:允许编译过程中发出能够提供的所有警告
|