Linux中的自动化构建——make/Makefile

如果想构建大工程项目,Makefile是不可或缺的。因为文件编译等工作我们手动来处理,费时费力,我们需要写Makefile来自动化处理

make是一条指令,Makefile是一个文件,它们两者搭配使用就可以实现自动化构建

Makefile大体结构就是依赖关系和依赖方法的组合,通俗理解,依赖关系是告诉机器起始和目标,依赖方法是告诉机器用什么指令可以完成上述依赖关系

上图就是Makefile的一个示例,可以实现test.c文件编译为可执行文件test

编写完Makefile文件后我们在命令行用make test或者只写make(只写make会自动执行第一条线------test-test.o- test.s-test.i)

我们可以用指令make clean清除可执行文件,依赖关系如果目标不需要依赖,可以不写冒号后面。而.PHONY我们一会再介绍

上述只是示例,我们一般不是这样用的

上幅图只是过渡,不够泛型

上述是Makefile的特殊语法,可以使Makefile更灵活一些

当我们已经有可执行文件test时,我们再次make,Linux会出现这样的字样

这是因为语法的制定者为了提高效率做出的考量,如果我们的源文件test.c没有更新就不需要再次编译------也就是说,编译器会比较test.c和test的最后修改时间,如果前者小于后者就不会再次编译了,而.PHONY会让make忽略源文件和可执行目标文件的修改时间对比

因此引出一个问题,修改时间是什么

Modify是修改时间(取决于文件内容是否被修改)

Change是状态改变时间(取决于文件属性是否被修改),但是文件内容一旦被修改Modify就会被修改,Change一定被修改

Access是访问时间,由于访问文件会很频繁,一访问就修改效率会很低,因此有访问文件不会每次都修改访问时间,可能是隔几次(取决于系统)

相关推荐
江华森2 分钟前
数据中心网络技术基础 —— 从原理到实操
linux·运维
yz_aiks22 分钟前
chrome-use 使用教程:让 Claude Code 操控已登录的 Chrome(禅道、ONES 实测)
chrome·自动化·大模型·ai agent
网络小江26 分钟前
组网第41课:ACL 门禁——标准/扩展、规则顺序、time-range、in/out 方向
运维·网络安全·acl·访问列表·in/out
牛马工作号41 分钟前
Copyparty 轻量文件共享:Docker Compose 部署、权限与多协议使用全指南
运维·docker·容器
骑着蜗牛撵大象3271 小时前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型
程序员初一1 小时前
我在 1C1G 的服务器上装了个桌面环境,然后用 VNC 连它,然后我后悔了
linux·ssh
星恒随风1 小时前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
晚风叙码1 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
无足鸟ICT2 小时前
【RHCA+】影响Linux系统性能的因素
linux·运维·服务器
沫璃染墨2 小时前
从零入门计算机网络系列(十):HTTP协议进阶——从资源路径解析到状态码与请求头详解
linux·运维·服务器·网络·c++·http