Linux-自动化构建make/makefile(初识)

1.认识

makefile是一个文件(该文件中写了如何编译代码,形成可执行程序),make是一条命令,写好了makefile之后,再make一下,整个工程就会自动编译,提高了软件开发的效率

2.重要性

2.1依赖关系和依赖方法

makefile的本质是依赖关系和依赖方法的结合

(第一行是依赖关系,第二行是依赖方法,第二行以tab键开头)

只需要make,即可执行proc的编译工作

.PHNOY:声明一个伪目标,让目标文件对应的方法总是被执行的

第一个clean:是伪目标的名称,可以随便起,这里是起清理作用的

第二个clean:是一行依赖关系,但是没有依赖文件列表

rm -f proc.c:是依赖方法(要形成clean目标文件就要执行他的依赖方法)

只需要make clean即可执行清理方法

2.2make/makefile的基本原理

  • makefile文件,会被make从上到下开始扫描,第一个目标名,是缺省形成的。如果我们要执行其他组的依赖关系和依赖方法,要make name(但是一般把形成可执行程序放在第一个)
  • makefile在执行gcc命令的时候,如果发生了语法错误,会终止推导过程
  • 依赖方法可以是任何指令,并会进行回显,如果想要关闭回显,那么在指令前+@,eg:

  • make解释makefile的时候,会 自动推导,推导过程 不执行依赖方法,直到推导到有依赖文件存在,然后再逆向的执行所有的依赖方法

(如图所示,proc依赖于proc.o文件[不存在->将命令入栈],proc.o依赖于proc.s文件[不存在->将命令入栈],proc.s依赖于proc.i文件[不存在->将命令入栈],proc.i文件-依赖于proc.c文件[存在->执行gcc -E proc.c -o proc.i命令],以此类推)

  • make默认只形成一个可执行程序,见5(大标题)

3.为什么有时候需要重新编译,有时候不需要

根据对比文件的Mtime做到的,对于源文件.c和可执行程序.exe,.c的时间更加新,则需要重新编;.exe的时间更加新,则不需要重新编。

.PHONY:让依赖方法忽视掉时间对比,这样程序就会被一直执行了。

(rm -f proc)本来就不关心时间

(eg:编译了一遍之后就已经是最新的(up to date),无法进行编译了)

(但是我们如果把.PHNOY放到proc之前)

这样就可以一直make了,因为忽略了时间,.PHONY让总是被做到

4.makefile中的特殊符号

%:是makefile语法中的通配符

%.c:会把当前目录下所有 的.c文件,展开到依赖列表中

$<:右侧的依赖文件,一个一个的交给gcc -c选项,形成同名的.o文件

$^:把所有的依赖文件列表全部交给gcc -c选项,形成同名.o文件

$@:代表目标文件列表

makefile中也可以定义变量,如上图所示

bin和src就相当于变量,要使用的话就$()即可;proc和proc.c是目标文件,

(最终写成的样子)

5.一次形成多个可执行文件

(记得在bin1和bin2之间加空格)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值