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的安装方式,一般说来推荐使用通用版本.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值