makefile

116 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情

一. 什么是makefile

◼ 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中, Makefile 文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编 译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile 文件就 像一个 Shell 脚本一样,也可以执行操作系统的命令。

◼ Makefile 带来的好处就是“自动化编译” ,一旦写好,只需要一个 make 命令,整 个工程完全自动编译,极大的提高了软件开发的效率。make 是一个命令工具,是一个 解释 Makefile 文件中指令的命令工具,一般来说,大多数的 IDE 都有这个命令, 比如 Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。

二. 文件命名和规则

文件命名

makefile 或者 Makefile

◼ Makefile 规则 一个 Makefile 文件中可以有一个或者多个规则

目标 ...: 依赖 ...

命令(Shell 命令) ...

目标:最终要生成的文件(伪目标除外)

依赖:生成目标所需要的文件或是目标

命令:通过执行命令对依赖操作生成目标(命令前必须 Tab 缩进) Makefile 中的其它规则一般都是为第一条规则服务的。

三. 工作原理

◼命令在执行之前,需要先检查规则中的依赖是否存在

如果存在,执行命令

如果不存在,向下检查其它的规则,检查有没有一个规则是用来生成这个依赖的, 如果找到了,则执
行该规则中的命令

◼ 检测更新,在执行规则中的命令时,会比较目标和依赖文件的时间

如果依赖的时间比目标的时间晚,需要重新生成目标

如果依赖的时间比目标的时间早,目标不需要更新,对应规则中的命令不需要被执行

四.

1.在makefile编辑,生成app

vim makefile

app:sub.c add.c mult.c div.c main.c gcc sub.c add.c mult.c div.c main.c -o app

image.png

结果如下 image.png

可以检测出是否最新 image.png

2.如果不存在依赖,向下检查其它的规则,检查有没有一个规则是用来生成这个依赖的, 如果找到了,则执 行该规则中的命令

image.png

image.png

3.简化写法

image.png

image.png

image.png

image.png

image.png