gcc常用控制选项

gcc生成可执行文件的4个步骤:预处理、编译、汇编、连接


1、执行过程控制选项
-c    编译或汇编源文件,但是不作连接.编译器输出对应于源文件的目标文件
-S    编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件.
-E    预处理后即停止,不进行编译.预处理后的代码送往标准输出.

2、输出文件控制选项
-o [file]    指定输出文件为file.该选项不在乎GCC产生什么输出,无论是可执行文件,目标文件,汇
编文件还是预处理后的C代码.

3、预处理器选项
-C
    告诉预处理器不要丢弃注释.配合'-E'选项使用.
-M  [ -MG ]
    告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系.对于每个源文件,预处理器输出 一

个make规则,该规则的目标项(target)是源文件对应的目标文件名,依赖项(dependency)是源文件中 `#include引

用的所有文件.生成的规则可以是单行,但如果太长,就用`/'-换行符续成多行.规则 显示在标准输出,不产生预处

理过的C程序.
-include [file]
    在处理常规输入文件之前,首先处理文件file,其结果是,文件file的内容先得到编译.

4、汇编器选项
-Wa,option
     把选项option传递给汇编器.如果option含有逗号,就在逗号处分割成多个选项.

5、连接器选项
-llibrary    连接名为library的库文件.
-Wl,option    把选项option传递给连接器.如果option中含有逗号,就在逗号处分割成多个选项.

6、目录选项
-Idir 在头文件的搜索路径列表中添加dir目录.
-Ldir 在`-l'选项的搜索路径列表中添加dir目录.

7、警告选项
-w   
    禁止所有警告信息.
-W   
    对下列事件显示额外的警告信息:   *非易变自动变量(nonvolatile automatic variable)可能在调用

longjmp时发生改变. 这些警告仅在优化编译时发生.
编译器只知道对setjmp的调用,他不可能知道会在哪里调用longjmp,事实上一个 信号处理例程可以在程序的任何

地点调用他.其结果是,即使程序没有问题,你也可能会得到警告,因为无法在可能出现问题 的地方调用longjmp.
    *既可以返回值,也可以不返回值的函数. (缺少结尾的函数体被看作不返回函数值)例如,下面的函数将导致这

种警告:
foo (a)
{
  if (a > 0)
    return a;
}
由于GNU CC不知道某些函数永不返回(含有abort和longjmp),因此有可能出现 虚假警告.
    *表达式语句或逗号表达式的左侧没有产生作用(side effect).如果要防止这种警告,应该把未使用的表达式

强制转换 为void类型.例如,这样的表达式`x[i,j]'会导致警告,而`x[(void)i,j]'就不会.
    *无符号数用`>'或`<='和零做比较.
-Wall
    显示各种类型警告.
-Wtraditional
    如果某些程序结构在传统C中的表现和ANSI C不同,编译器就发出警告.
   *宏参出现在宏体的字符串常量内部.传统C会替换宏参,而ANSI C则视其为常量的一部分.
   *某个函数在块(block)中声明为外部,但在块结束后才调用.
   *switch语句的操作数类型是long.

8、调试选项
-g
    以操作系统的本地格式(stabs, COFF, XCOFF,或DWARF)产生调试信息. GDB能够使用这些调试信息.


9、优化选项
-O/-O1
    优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.
-O2
    多优化一些.除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作.例如不进行循环展开(loop

unrolling)和函数内嵌(inlining).和-O选项比较,这个选项既增加了编译时间,也提高了生成代码的 运行效果.
-O3
    优化的更多.除了打开-O2所做的一切,它还打开了-finline-functions选项.

 

10、目标机选项
-b machine
    参数machine指出编译的目标机种.这个选项用于安装为交叉编译器的GNU CC.
    参数machine的值和配置GNU CC交叉编译器时设置的机器类型一样.例如,如果交叉编译器配置有 `configure

i386v',意思是编译80386上的System V目标码,那么你可以通过`-b i386v'运行交叉编译器.
如果没有指定`-b'选项,通常指编译本机目标码.

-V version
    参数version指出运行哪个版本的GNU CC.这个选项用于安装了多个版本的GCC.例如,如果 version是`2.0',意

味着运行GNU CC 2.0版.
    如果没有指定`-V'选项,缺省版本取决于GNU CC的安装方式,一般说来推荐使用通用版本.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值