GCC编译与Makefile基本语法

写在最前面:所有的博文都是为了若干年月以后当我再次翻看可以快速回想起之前的零星知识。学海无涯,在看这篇文章的未来的你,加油吧!

目录

一、Makefile简介

二、Linux环境下的C语言编译过程

2.1 gcc编译流程

2.2 gcc常用参数解释

三、makefile基本语法

3.1 makefile基本语法

3.2 实战栗子


一、Makefile简介

Makefile是一种用于编译的脚本语言,它可以很便捷地管理项目的代码编译。如果项目中某些源文件被修改则只编译这几个被修改的源文件。又或者某个头文件被修改,则重新编译所有包含该头文件的源文件。文件夹内的makefile文件可以写做makefile或者Makefile。

二、Linux环境下的C语言编译过程

为了更好地理解makefile的编译工作流程,首先要搞明白一次完整的c语言的编译过程是什么样子的。gcc是我们常用的编译器,我们以它为例进行说明。

2.1 gcc编译流程

一个c源文件最终只有生成可执行文件才能被机器正确执行。使用gcc编译程序时,该过程分为以下四个阶段:预处理、编译、汇编、链接。假设我们有一个c源文件:啊对对对.c,我们用这个程序的变化过程来详细解释gcc的各编译阶段。(文献[5]中详细地进行了解释,下面为了方便理解,我们将[5]中各概念再次给出)

(1)预处理

该阶段编译器主要做加载头文件、宏替换、条件编译等工作,一般用于处理带"#"的语句,如#define xxx xxx。可以使用gcc -E 选项进行查看。在这一步骤中.c文件被预处理输出为.i文件,即

啊对对对.c --> 啊对对对.i

(2)编译

编译阶段主要做语法检查和词法分析,在确认所有指令都符合语法规则之后,将.i文件翻译成等价的中间代码或汇编代码。可以使用gcc -S 选项进行查看。在这一步骤中.i文件被编译输出为.s文件,即

啊对对对.i --> 啊对对对.s

(3)汇编

汇编阶段将.s文件转成二进制目标代码.o文件(并非最终的可执行文件)。在这一步骤中.s文件被汇编输出为.o文件,即

啊对对对.s --> 啊对对对.o

(4)链接

最终的链接阶段,将目标文件、启动代码、库文件链接成可执行文件。在这一步骤中.o文件被链接成最终的可执行文件,即

啊对对对.o --> 啊对对对  //假设最终的可执行文件的名字叫做:啊对对对(当然也可以不叫这个名字)

综上所述,一个c源文件最终生成可执行文件要经过如下的过程:

表1  gcc各阶段以及文件类型
gcc阶段 文件类型(源文件为.c)
预处理 .c → .i
编译 .i →.s 
汇编 .s →.o
链接
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值