gcc/g++ 参数总结

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]

1. gcc、g++、cc、CC

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

2. 参数详解

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

    • -g为了调试用的,加个-g 是为了gdb 用,不然gdb用不到

    • -o output_filename,确定输出文件的名称为 output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out

      • 一般语法: gcc filename.c -o filename
      • 如果不加 -o filename 那么默认就是输出 filemame.out。这个-o就是用来控制输出文件的。
    • -c 只编译(compile)不链接,产生.o文件,就是obj文件,不产生执行文件
  • -O:Optimization,优化,O0/O1/O2/O3 ,
    编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 

  • -Wall:Warning all,W 要大写;

    生成所有警告信息。

    • ‘-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.

3. 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 强制重新生成文件包的符号表

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值