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

相关推荐
HEJOO92 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
还卿一钵无情泪3 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
slimer3 小时前
07.进制转换上篇:位权展开与十进制互转
linux
顺风尿一寸3 小时前
手写迷你 Docker:用 Namespace + Cgroup v2 实现一个简单容器
linux
一木 之林3 小时前
DeepSeek Agent 开发(三)
java·大数据·linux
打工仔折腾 AI4 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
大猫会长4 小时前
调用codebuddy集成的supabase授权白屏解决方法
linux·运维·服务器
羔羊++4 小时前
29_实验二十八_buildroot配置与编译
linux
夜之眷属5 小时前
服务器被挖矿病毒入侵的排查与清理实录
运维·服务器