GCC编译选项研究(1)

时间:2021-12-12 12:44:07

GCC -- GNU C & C++ Compiler

一、使用

gcc [option|filename]...

g++ [option|filename]...

二、GCC的处理步骤

(1)预处理:对预处理指令和宏进行处理

(2)编译:将代码编译成汇编代码

(3)汇编:将汇编代码生成二进制文件

(4)连接:将目标二进制文件进行连接形成可执行程序

三、gcc和g++

gcc认为预处理后的文件是C文件,以C形式连接

g++认为预处理后的文件是C++文件,以C++形式连接

四、文件扩展名及后续操作

.c             c程序;预处理、编译、汇编

.C            c++程序;预处理、编译、汇编

.cc           c++程序;预处理、编译、汇编

.cxx         c++程序;预处理、编译、汇编

.m           objective-c程序;预处理、编译、汇编

.i             预处理后的C文件;编译、汇编

.ii            预处理后的C++文件;编译、汇编

.s            汇编语言源程序;汇编

.S            汇编语言源程序;预处理,汇编

传递给链接器的文件.o,.a文件

.o        目标文件

.a        静态库文件

五、总体选项

(1)-x   指明输入文件的语言(不从扩展名得到)(c、objective-c、c++、assembler、none等)

g++ -x c ctest.c

(2)-o  输出文件

g++ -o ctest.o ctest.c

(3)-v  显示编译阶段的详细信息

g++ -v -o ctest.o ctest.c

(4)-E  预处理后便停止,送标准输出(不产生文件)

g++ -E ctest.c

(5)-S  编译后便停止,不汇编;对于输入的非汇编语言文件,产生汇编语言文件(.s文件)

g++ -S ctest.c

(6)-c  编译或汇编文件,不作链接;输出目标文件(.o文件)

g++ -c ctest.c

(7)不加-E、-S、-c,则预处理、编译、汇编、链接

g++ -o ctest ctest.c,产生可执行文件

六、语言选项(控制编译器可接受的C方言)

(1)-ansi  支持标准的ANSI C程序

(2)-fno-asm  不把asm、inline、typeof当关键字

(3)-fno-builtin  不接受不是两个下划线开头的内建函数

(4)-fdollars-in-identifiers  允许$作为标识符

(5)-fno-dollars-in-identifiers  不允许$作为标识符

(6)-fall-virtual  所有可能的成员函数黙认为虚函数

(7)-fthis-is-variable  允许对this赋值

(8)-funsigned-char  将char定义为无符号的

(9)-fsigned-char将char  定义为有符号的 -fno-unsigned-char

(10)-funsigned-bitfileds、-fno-signed-bitfields  定义位域为无符号的

(11)-fsigned-bitfields、-fno-unsigned-bitfields  定义位域为有符号的

(12)-fwritable-strings  将字符串常量放到可写数据段

还有其他一些语言选项,见GCC手册