Linux——Makefile和文件时间
发布日期:2025-04-07 09:14:16 浏览次数:7 分类:精选文章

本文共 1660 字,大约阅读时间需要 5 分钟。

.....

今天我们来了解一下一个强大的工具Makefile。它可以自动帮我们自动处理代码。

我们来看看度娘的解释:

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

Makefile的伟大之处在于,编译多个源文件或者管理编译依赖关系的复杂性,就不再是 अगरOUCH那样的苦工苦修了。我们只需写一个简单的Makefile文件,在需要的时候用【make】这个命令就能完成编译任务。

具体操作步骤一目了然:

  • 创建Makefile文件
    文件名绝对不能改动为Makefile,必须严格按照这个名字来保存。打开终端,执行以下命令创建Makefile:
  • vim Makefile
    1. 编写Makefile内容
      进入Makefile文件中,输入以下代码:
    2. # 编译生成mybin可执行文件mybin: Test.c	gcc Test.c -o mybin# 清理已编译的目标文件clean:	rm -rf mybin
      1. 用make命令编译
        进入根目录,执行make命令:
      2. make

        编译完成后,可以在当前目录中找到名为mybin的可执行文件。再次执行make命令时,文件如下:

        执行生成脚本文件时,会优先检查源文件的更新时间。如果没有发生任何改动,Make会跳过编译步骤直接输出“目标已建立”。

        1. 使用make clean清理
          当不再需要mybin文件时,可以随时执行以下命令移除目标文件:
        2. make clean

          接下来,我们来分析这个简单的Makefile结构。

          依赖关系

          第一个规则定义了mybin可执行文件的依赖关系:它由Test.c源文件编译而来。可以推断出,Test.c经过编译生成了mybin文件。

          依赖方法

          第二个规则定义了具体的编译命令。Make会依据第一个规则,使用第二个规则来生成目标文件。前提条件是Trist.c存在,我们用Tab键启动一个新的命令行,编写编译指令:

          gcc Test.c -o mybin

          这样Make就知道,每当Test.c发生改变时,需要重新生成mybin文件。

          文件时间机制

          Make内部会比较源文件和目标文件的最后更新时间。只有目标文件的更新时间晚于源文件时才执行重新编译。这意味着:

          • 如果mybin比Test.c更新时间早,表示已经是最新版本,不需要重新编译。
          • 如果Test.c被修改 guts......,那么它的时间会比生成它的mybin文件更新,进而触发重新编译。

          示例验证:

          修改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还有其他需求,可以进一步深入探索其强大功能。

    上一篇:Linux——vim编辑器
    下一篇:Linux——gdb调试

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月24日 08时08分21秒