GCC命令选项简介

gcc命令的选项多达上百个,分别对应不一样的功能,这里就一些平时比较经常使用的选项作简要解释,详细的gcc命令解释请自行查看手册:man gcc。缓存

从源代码文件生成可执行文件的过程

首先须要明白的是,gcc对源代码文件的编译分为四个过程,分别是预处理,编译,汇编,链接。链接以后生成可执行文件。工具

每个过程对应的选项是:性能

预处理:-E 这一步产生输出到标准输出,也就是说默认是输出到屏幕上,因此要加上-o选项,通常-o选项后面跟的文件名以.i结尾(.i结尾的文件为gcc的C语言预处理文件)。优化

编译:-S 这一步的输入文件是预处理文件,默认输出文件是以.s结尾的汇编语言文件。若是不加-o选项,产生的汇编语言文件与输入的预处理文件同名。ui

汇编:-c 这一步的输入文件为汇编语言文件,默认输出文件是以.o结尾的目标文件。若是不加-o选项,产生的目标文件与输入的汇编语言文件同名。调试

gcc命令后能够跟一个目标文件,若是不加-o选项,默认产生一个文件名为a.out的可执行文件。另外,gcc命令后能够直接跟一个.c源程序文件,这样能够不用手动执行以上步骤,直接生产可执行文件,而且不产生多余的文件输出。内存

优化选项

-O:加上这个选项能够控制程序编译过程当中的优化级别,固然优化的代价是付出更多的编译时间。下面分别介绍它的优化级别:编译器

-O0:效果等同于不加-O选项,即不对代码作任何程度的优化。编译

-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是很是基础的,但通常这些任务确定能顺利完成。基础

-O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提升代码性能而不会增大致积和大量占用的编译时间。

-O3:这是最高最危险的优化等级。用这个选项会延长编译代码的时间,而且在使用gcc4.x的系统里不该全局启用。自从3.x版本以来gcc的行为已经有了极大 地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译全部的软件包将产生更大致积更耗内存的二进 制文件,大大增长编译失败的机会或不可预知的程序行为(包括错误)。这样作将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。

-Os:这个等级用来优化代码尺寸。其中启用了-O2中不会增长磁盘空间占用的代码生成选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器很是有用。但也可能产生些许问题,所以软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。

其余经常使用选项

-g:启用这个选项会在最后生成的可执行文件中包含源代码的符号信息,这样才能在后续过程当中使用gdb等调试工具对程序进行调试。

-Wall:这个选项表示在编译源代码的过程当中报告其中出现的警告信息,不开启此选项的话gcc默承认能会忽略某些编译过程当中出现的警告。

-Werror:开启此选项后,gcc在编译源代码的时候不止会捕获全部的警告信息,并且在遇到警告时会中止编译。开启次选项的目的主要在于提升代码的书写质量。

-I:此选项后面一个目录。默认状况下,gcc会从系统的头文件目录(Linux下是/usr/include/)下搜索头文件,加上此选项后,此选项后面所跟着的目录也会被列入头文件搜索路径。

相关文章
相关标签/搜索