GCC

Table of Contents

1 参数选项

1.1 编译,链接

  • -E filename.c: 预处理,不生成文件。可以查看一段代码预处理后的代码。
  • -C: 在预处理的时候,不删除注释信息,一般和 `-E` 一起使用,用来分析代码。
  • -S filename.c: 预处理、编译,生成汇编代码。
  • -c filename.c: 预处理、编译、汇编,生成目标文件。
  • -M: 生成文件关联的信息(也就是目标文件依赖的源代码)。
  • -MM: 和上面的那个一样,但是它将忽略由 #include<file> 造成的依赖关系。
  • -llibrary: 指定编译所需的库。
  • -Ldir: 指定编译搜索库的路径。
  • -g: 在编译的时候产生调试信息。
  • -static: 禁止使用动态库。
  • -share: 尽量使用动态库。
  • -w: 不生成任何警告信息。
  • -Wall: 生成所有警告信息。
  • -pedantic-error: 允许发出ANSI C标准所列的全部错误信息
  • -werror: 把所有的告警信息转化为错误信息,并在告警发生时终止编译过程。
  • -o: 生成目标文件。eg: gcc -o hello.asm -S hello.c
  • -ansi: 关闭 gnu c 中与 ansi c 不兼容的特性, 激活 ansic的 专有特性(包括禁止一些 asm inline typeof 关键字, 以及 UNIX,vax 等预处理宏)。
  • fno-asm: 此选项实现 ansi 选项的功能的一部分,它禁止将 asm, inline 和 typeof 用作关键字。
  • -undef: 取消对任何非标准宏的定义。
  • -Idir: 指定头文件查找目录(如果没找到,再去缺省的目录中找)。
  • -nostdinc: 规定不在 g++ 指定的标准路经中搜索, 但仍在其他路径中搜索。
  • -nostdin C++: 规定不在 g++ 指定的标准路经中搜索, 但仍在其他路径中搜索。
  • -Wno-invalid-offsetof: -Wno-invalid-offsetof (C++ and Objective-C++ only), Suppress warnings from applying the ‘offsetof’ macro to a non-POD type.

1.2 优化选项

  • -O0: 关闭所有优选项,不做程序优化,默认等级。
  • -O1: 这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。
  • -O2: O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。
  • -O3: 是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。

2 参考资料

Date: 2017-12-04 11:37:43

Author: JerryZhang