
Linux——Makefile和文件时间
创建Makefile文件文件名绝对不能改动为Makefile,必须严格按照这个名字来保存。打开终端,执行以下命令创建Makefile:
发布日期:2025-04-07 09:14:16
浏览次数:7
分类:精选文章
本文共 1660 字,大约阅读时间需要 5 分钟。
.....
今天我们来了解一下一个强大的工具Makefile。它可以自动帮我们自动处理代码。
我们来看看度娘的解释:
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile就像一个Shell脚本一样,也可以执行操作系统的命令。Makefile的伟大之处在于,编译多个源文件或者管理编译依赖关系的复杂性,就不再是 अगरOUCH那样的苦工苦修了。我们只需写一个简单的Makefile文件,在需要的时候用【make】这个命令就能完成编译任务。
具体操作步骤一目了然:
vim Makefile
- 编写Makefile内容进入Makefile文件中,输入以下代码:
- 用make命令编译进入根目录,执行make命令:
- 使用make clean清理当不再需要mybin文件时,可以随时执行以下命令移除目标文件:
- 如果mybin比Test.c更新时间早,表示已经是最新版本,不需要重新编译。
- 如果Test.c被修改 guts......,那么它的时间会比生成它的mybin文件更新,进而触发重新编译。
$^
:表示上一行的内容$@
:表示目标文件
# 编译生成mybin可执行文件mybin: Test.c gcc Test.c -o mybin# 清理已编译的目标文件clean: rm -rf mybin
make
编译完成后,可以在当前目录中找到名为mybin的可执行文件。再次执行make命令时,文件如下:
执行生成脚本文件时,会优先检查源文件的更新时间。如果没有发生任何改动,Make会跳过编译步骤直接输出“目标已建立”。
make clean
接下来,我们来分析这个简单的Makefile结构。
依赖关系
第一个规则定义了mybin可执行文件的依赖关系:它由Test.c源文件编译而来。可以推断出,Test.c经过编译生成了mybin文件。依赖方法
第二个规则定义了具体的编译命令。Make会依据第一个规则,使用第二个规则来生成目标文件。前提条件是Trist.c存在,我们用Tab键启动一个新的命令行,编写编译指令:gcc Test.c -o mybin
这样Make就知道,每当Test.c发生改变时,需要重新生成mybin文件。
文件时间机制
Make内部会比较源文件和目标文件的最后更新时间。只有目标文件的更新时间晚于源文件时才执行重新编译。这意味着:示例验证:
修改Test.c代码后发现make=axx之前生成的mybin时间早于Test.c时间?运行:
stat Test.c mybin
观察输出结果,检查文件的Access、Modify、Change时间是否符合预期。如果出现Test.c的时间优先,表示需要重新编译。
.PHONY伪目标
所谓的.PHONY目标,是Make的一种特殊目标。通常用于强制执行操作,即使目标文件不存在。例如:PHONY: @echo "清理已编译文件..." rm -rf mybin
这样不管是否存在mybin,执行clean命令时总是会进行文件清理操作。
其它Makefile特性
在Makefile中可以使用变量:CC = gccEXE = mybin$(EXE): $(SOURCES) $(CC) -o $@ $(SOURCES)
这样提高脚本的可读性和可维护性。
支持特殊组合符号:
请根据需求合理组合这些变量。
至此,你已经掌握了Makefile的基础知识及其在项目管理中的实际应用。通过合理设计Makefile文件,你可以实现自动化编译、依赖管理以及文件版本控制等多种功能。如果对Makefile还有其他需求,可以进一步深入探索其强大功能。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月24日 08时08分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux Ubuntu安装ftp并将本地文件上传到云服务器
2023-02-01
linux udev 自动挂载 SD卡/U盘
2023-02-01
Linux UDP C/S例子
2023-02-01
Linux uniq学习笔记
2023-02-01
Linux unit14
2023-02-01
Linux VFS中write系统调用实现原理【转】
2023-02-01
Linux VI command
2023-02-01
linux vim 插件
2023-02-01
Linux vim 操作大集合,Linux运维工程师收藏!
2023-02-01
Linux vim编辑器
2023-02-01
Linux —— 信号初识
2023-02-01
Linux —— 信号(3)
2023-02-01
Linux —— 信号(4)
2023-02-01
Linux 上 Python 中的环境变量
2023-02-01
linux 上定时任务执行shell脚本
2023-02-01
Linux 上查看和刷新 DNS 缓存
2023-02-01
linux 下 php 安装 libevent
2023-02-01
Linux 下 `/etc/limits.conf` 文件中的配置详解:`* soft nofile 65535` 和 `* hard nofile 65535` 以及 `* soft nproc
2023-02-01
Linux 下DNS详解
2023-02-01