gcc 参数总结

GCC:The GNU Compiler Collection

它(GNU Compiler Collection)包含了多种语言的编译器,如 C, C++, Objective-C, Objective-C++, Java, Fortran和Ada。但每种编译器的名字不一样,gcc 和 g++ 分别是 gnu 的 c & c++ 编译器

gcc/g++ 在执行编译工作的时候,总共需要 4 步

  1. 预处理, 生成 .i 的文件 [ 调用预处理器 cpp]
  2. 将预处理后的文件转换成汇编语言 , 生成文件 .s[ 调用编译器 gcc/egcs]
  3. 有汇编变为目标代码 ( 机器代码 ) 生成 .o 的文件 [ 调用汇编器 as]
  4. 连接目标代码 , 生成可执行程序 [ 调用链接器 ld]

gcc g++ cc CC

  • gcc是 C编译器;
  • g++是C++编译器;
  • linux下cc一般是一个符号连接,指向gcc;gcc和g++都是GUN(组织)的编译器。
  • 而CC则一般是makefile里面的一个名字,即宏定义,因为Linux/Unix都是大小写敏感的系统,这点一定要注意。

参数详解

  • (1)-g
      
      只是编译器,在编译的时候,产生调试信息。

  • (2)-O:Optimization,优化

    • O0
    • O1
    • O2
    • O3
      编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 
  • (3)-Wall:Warning all

    生成所有警告信息。

    • ‘-Wcomment’ This option warns about nested comments.
    • ‘-Wformat’ This option warns about the incorrect use of format strings in functions such as printf and scanf, where the format specifier does not agree with the type of the corresponding function argument.
    • ‘-Wunused’ This option warns about unused variables.
    • ‘-Wimplicit’ This option warns about any functions that are used without being declared.
    • ‘-Wreturn-type’ This option warns about functions that are defined without a return type but not declared void. It also catches empty return statements in functions that are not declared void.

ar cqs

GNU GCC 实用工具 ar 的参数的意义:

ar key [args] [posname] archive [files]

将一组编译过的文件合并为一个文件。最常见的用法就是建立并更新由装载器(loader–ld)使用的库文件。在参数中,只有 key可以使用,但是每个key都可以加上附加的args(中间不带空格)。posname是合并后文件包的文件名。当移动或是替代files的时候,你可以在posname之前或之后进行说明.
files 可以有文件通配符,如 *.o。

key:

  • d 从文件包中删除文件
  • m 从文件包中移动文件到包尾
  • p 打印出文件包中的文件
  • q 在文件包尾加入文件.
  • r 在文件包中代替文件.
  • t 列出包中文件名为files指明的文件名的文件内容.
  • x 从文件包中解压出文件名为files指明的文件.

args:

  • a 与r或m共同使用来将files指明的文件放置于posname之后
  • b 与a作用相同,但是是在posname之前使用.
  • c 无提示模式创建文件包
  • i 与b相同.
  • s 强制重新生成文件包的符号表
  • T 只在Solaris中有这个参数.在不支持长文件名的文件系统中减短长文件名.没有这个操作的话,长文件的解压结果是错误的.
  • u 与r共同使用,用来仅取代那些在生成文件包之后改动过的文件.
  • v 细节化,并打印一个文件包的描述
ar cqs libmytest.a myfun.o

表示:
(1) 生成 静态库的文件名是 libmytest.a
(2) c 表示无提示模式创建文件包
(3) q 表示在文件包尾加入 myfun.o
(4) s 强制重新生成文件包的符号表

你可能感兴趣的:(gcc 参数总结)