`
xitonga
  • 浏览: 589878 次
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    linux C编程实战

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linuxC编程实战.part2.rar(文件已加密)

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linux C编程实战 电子书part2

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linux C编程实战 电子书part3

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linux C编程实战 电子书part4

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linux C编程实战 电子书part5

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linuxC编程实战.part5.rar

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linuxC编程实战.part3.rar

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linux C编程实战 电子书part1

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linuxC编程实战.part4.rar

     3.4.2 gcc的常用选项   3.4.3 gcc的报错类型及对策   3.5 面试题选与实例精讲   3.5.1 面试题选   3.5.2 实例精讲   3.6 习题   第4章 C函数、数组、指针和调试器gdb   第5章 C语言预处理、...

    linux网络编程-宋敬彬-part2

    2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 ...

    linux网络编程-宋敬彬-part3

    2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 ...

    linux网络编程-宋敬彬-part1

    2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 ...

    嵌入式Linux应用程序开发标准教程(第2版全)

    3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理器 3.5.1 makefile基本结构 3.5.2 makefile变量 3.5.3 makefile规则 3.5.4 make管理器的使用 3.6 使用autotools 3.6.1 ...

    嵌入式Linux应用程序开发详解

    3.4.2 Gcc编译选项分析 74 3.5 Gdb调试器 77 3.5.1 Gdb使用流程 78 3.5.2 Gdb基本命令 81 3.6 Make工程管理器 86 3.6.1 Makefile基本结构 86 3.6.2 Makefile变量 87 3.6.3 Makefile规则 90 ...

    linux程序设计(第三版)

    为详细介绍的各个命令、工具和应用程序安排一个语法框,以描述命令的语法、目的、输出、常用选项特性。多数章都有一个有用的Web资源表。另外,每章都有一个内容小结。本书末尾还附有一个术语表。 使用本书 如果把...

    Linux程序设计 第4版.haozip01

    18.1.3 gcc选项 635 18.2 接口和lsb 636 18.2.1 lsb标准函数库 637 18.2.2 lsb用户和组 638 18.2.3 lsb系统初始化 638 18.3 文件系统层次结构标准 639 18.4 更多标准 642 18.5 小结 642 注: 仅用于学习,...

    Linux程序设计 第4版.haozip02

    18.1.3 gcc选项 635 18.2 接口和lsb 636 18.2.1 lsb标准函数库 637 18.2.2 lsb用户和组 638 18.2.3 lsb系统初始化 638 18.3 文件系统层次结构标准 639 18.4 更多标准 642 18.5 小结 642 注: 仅用于学习,...

    清华大学Linux操作系统原理与应用

    D.2.2 gcc/egcs的主要选项 240 D.2.3 gdb简介 240 D.2.4 gdb的常用命令 241 D.2.5 gdb使用示例 242 D.3 GNU make和makefile 243 D.3.1 GNU make 243 D.3.2 makefile的基本结构 243 D.3.3 makefile的变量 244 D.3.4 ...

Global site tag (gtag.js) - Google Analytics