GCC命令详解与实践(一) -- 概述

GCC编译器的功能

这一章,我们来学习gcc编译器的命令。很多讲makefile的资料因为对gcc命令操作介绍较少,对小白学习makefile非常不友好,所以,在这里我想重点介绍一下gcc的常用命令。

在开始学习之前,我们再来回顾一下makefile的规则,Makefile的规则如下:

targets: prerequisites
<commands>

target 也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签( Label),对于标签这种特性,在后续的“ 伪目标” 章节中会有叙述。

prerequisites 就是,要生成那个target 所需要的文件或是目标。

command 也就是 make 需要执行的命令。(任意的 Shell 命令)。

以上的<command>就是我们这篇文章要讲的gcc命令。GCC能够将几个文件预处理并编译成几个汇编文件或一个汇编文件;然后,每个汇编文件生成一个目标文件,并将所有目标文件(新编译的和指定为输入的)链接到一个可执行文件中。主要过程最多只包括下面4个步骤,并且总是按这个顺序执行:

  1. 预处理,生成 .i 文件;
  2. 编译,预处理后的文件转换生成汇编文件,即.s文件;
  3. 汇编,将汇编文件转换生成目标文件,即.o 文件;
  4. 链接,将目标文件链接生成可执行文件,.bin,.exe,或者.hex等等。

gcc编译选项分类

想要详细了解GCC编译器命令同学,可以通过gcc官网获取资料。下面我重点介绍一些常用的GCC命令,以及用法。

GCC编译器的命令规则如下:

gcc [options] file...

其中:

  1. gcc是必须的,也是固定的;
  2. options是gcc的命令选项,也是必须的,gcc编译器提供了许多编译,汇编还有链接选项供用户进行选择;
  3. file是作为命令的参数使用,可以有多个参数或者没有参数。

gcc编译选项分为以下几类:

  1. 全局选项 -- 控制输出类型的选项。
  2. C选项 -- 控制C语言子集的选项。
  3. C++选项 -- 控制C++语言子集的选项。
  4. Objective-C和objective - C++语言的选项 -- 控制Objective-C和objective - C++语言子集的选项。
  5. 诊断消息格式化选项 -- 控制诊断消息格式的选项。
  6. 告警选项 -- 请求或禁止警告的选项。
  7. 静态分析选项。
  8. Debug选项。
  9. 代码优化选项。
  10. 程序工具选项。
  11. 预编译器选项。
  12. 汇编器选项。
  13. 链接器选项。
  14. 目录选项 -- 目录搜索的选项。
  15. 代码生成选项 -- 代码生成约定的选项。
  16. 开发者选项 -- GCC开发人员的选项。
  17. 芯片相关的选项。

注意:本文主要针对的是C语言的命令操作。

gcc编译选项有很多,但许多我们是用不到的,我们重点以下几个选项:

  • 全局选项
  • C选项
  • 告警选项
  • Debug选项
  • 代码优化选项
  • 预编译器选项
  • 汇编器选项
  • 链接器选项
  • 目录选项
  • 芯片相关的选项(嵌入式相关)

接下来我们对以上几个选项分别进行介绍。

下一节