Makefile学习③:编译流程

Makefile学习③:编译流程

学习前准备

实现七个文件的编写,例如:实现加减乘三个函数的.c文件和.h文件的编写加上主函数main.c,方便后续使用Makefile将其分别编译。
博主的demo如下:

在这里插入图片描述
使用gcc 命令将所有文件编译出来生成a.out文件,执行a.out(博主的a = 1,b = 2)

在这里插入图片描述

使用Makefile进行编译

一:创建一个Makefile文件将编译命令输入并执行。

main:
	gcc add.c sub.c multi.c main.c

结果如图所示
在这里插入图片描述

二:优化Makefile文件
如一所示的Makefile文件能够实现我们的目标,但是这样的写法对于庞大的项目来说并不完美,我们进行如下的改动:

main:add.o sub.o multi.o
	gcc add.o sub.o multi.o main.c -o main

add.o :add.c
	gcc -c add.c -o add.o
	
sub.o :sub.c
	gcc -c sub.c -o sub.o
	
multi.o :multi.c
	gcc -c multi.c -o multi.o

进行编译会生成:可执行文件main以及add.o,sub.o,multi.o三个二进制文件
在这里插入图片描述
如此修改的目的是为了使得多个文件同时被依赖的时候,若其中仅有一个文件被修改,则无需将全部文件重新编译,而只编译被修改的文件即可,大大节省文件编译的时间,如下图所示,博主修改了加法函数中的运算规则,然后重新编译并执行。
在这里插入图片描述
可以看到重新执行make命令,系统仅重新编译了add.o文件

gcc/g++ 编译流程

gcc main.c -o main  #直接从源代码到目标可执行文件

把过程拆分:
在这里插入图片描述
例如:
预处理:gcc -E main.c 得到 main.i的扩展源代码
编译:gcc -S main.i 得到 main.s的汇编文件
汇编:gcc -c main.s 得到main.o(.obj)的二进制文件
链接:gcc main.o add.o sub.o multi.o 将需要的二进制文件进行链接生成a.out可执行文件

详解可见:C语言的编译过程详解

由此可见使用Makefile进行分别编译,其实就是将汇编和链接的过程进行分部处理,以保证项目的可移植性和模块化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值