gcc命令的选项多达上百个,分别对应不同的功能,这里就一些平时比较常用的选项做简要解释,详细的gcc命令解释请自行查看手册:man gcc。
从源代码文件生成可执行文件的过程
首先需要明白的是,gcc对源代码文件的编译分为四个过程,分别是预处理,编译,汇编,连接。连接之后生成可执行文件。
每一个过程对应的选项是:
预处理:-E 这一步产生输出到标准输出,也就是说默认是输出到屏幕上,所以要加上-o选项,一般-o选项后面跟的文件名以.i结尾(.i结尾的文件为gcc的C语言预处理文件)。
编译:-S 这一步的输入文件是预处理文件,默认输出文件是以.s结尾的汇编语言文件。如果不加-o选项,产生的汇编语言文件与输入的预处理文件同名。
汇编:-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/)下搜索头文件,加上此选项后,此选项后面所跟着的目录也会被列入头文件搜索路径。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。