gcc/g++命令参数

在windows环境下,我们运行一程序,只需要在VS中点击运行按键即可,VS帮我们做完了程序的预处理、编译、汇编、链接阶段
但是在linux环境下,我们只能借助gcc/g++完成这一系列的操作
-o参数:g++ main.cpp -o main
  -o:output(输出)的意思,指将main.cpp输出为main。如果不指名具体的执行文件名(g++ main.cpp),将会在同级目录下生产a.out文件
-E参数:g++ -E main.cpp -o main.i
  -E:prEprocessing(预处理)的意思,该过程完成:宏替换、去注释、头文件展开、添加行号等动作
-S参数:g++ -S main.i -o main.s
  -S:aSsemble(汇编)的意思。该过程将源码变为汇编代码
-c参数:g++ -c main.s -o main.o
  -c:compile(编译)的意思。该过程将一系列的汇编代码,变成机器代码
编译的过程代码只需要找到有匹配的声明即可,不管接口有没有定义,所以出现未定义符号的阶段都是在链接阶段。
C++一般不会存在重复声明的问题,因为编译阶段,会将函数名以及变量类型组合成一个符号。
C语言会存在重复声明的问题,因为C语言在编译阶段只会将函数名组成一个符号,所以即使参数不同也无济于事。
当然我们可以在整个编译链接阶段加入额外的参数进行控制,如:
 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

原文地址:https://www.cnblogs.com/wangdongfang/p/13358349.html