首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

仅当某些文件发生更改时才运行伪目标

伪目标是Makefile中的一个特殊目标,它并不代表一个真正的文件,而是一组命令的集合。伪目标通常用于定义一些不生成文件的操作,比如清理临时文件、编译项目等。

在Makefile中,可以使用伪目标来实现只在某些文件发生更改时才运行的功能。具体实现方式如下:

  1. 首先,需要定义一个伪目标,比如"run"。
  2. 在该伪目标下,编写判断文件是否发生更改的逻辑。可以使用一些工具或脚本来实现,比如使用md5sum命令计算文件的MD5值,然后与之前保存的MD5值进行比较。
  3. 如果文件发生更改,则执行相应的命令或操作。可以是编译项目、运行测试等。
  4. 如果文件没有发生更改,则不执行任何操作。

下面是一个示例的Makefile:

代码语言:txt
复制
.PHONY: run

run:
    @if [ $$(md5sum file.txt | cut -d ' ' -f 1) != $$(cat md5.txt) ]; then \
        echo "File has changed. Running commands..."; \
        # 在这里编写需要执行的命令或操作
        echo "Commands executed."; \
        md5sum file.txt | cut -d ' ' -f 1 > md5.txt; \
    else \
        echo "File has not changed. Skipping commands."; \
    fi

在上述示例中,我们定义了一个伪目标"run"。在该目标下,我们使用md5sum命令计算文件"file.txt"的MD5值,并与之前保存的MD5值进行比较。如果两者不相等,则输出"File has changed. Running commands...",并执行相应的命令或操作。如果两者相等,则输出"File has not changed. Skipping commands."。

需要注意的是,为了记录文件的MD5值,我们将其保存在"md5.txt"文件中。在每次执行完命令或操作后,需要更新该文件的内容。

这是一个简单的示例,实际应用中可能需要根据具体情况进行修改和扩展。同时,根据不同的需求,可以使用不同的工具或脚本来实现文件更改的判断逻辑。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux必备工具】自动化构建工具makefile的使用详解

/filename,其中 filename 是可执行文件的名称,就可以运行程序。...在 Makefile 中,空行被视为分隔符,用于区分不同的规则或目标 Make 工具解析 Makefile 文件时,它会忽略空行,并将第一行之后的非空行视为第一个规则或目标。...例如:上面的gcc test -o test.c 2.2.4 目标 目标目标是指在 Makefile 中.PHONY定义的不对应实际文件目标,通常用于执行一些特定的操作,比如清理临时文件...Access(最近访问时间):普通文本文件打开:cat、vim,或者对目录进入、ls显示等 Modify (对内容修改):文件内容发生变化时,修改时间(mtime)会被更新。...Change(对属性修改):文件的权限、所有者、链接数或文件名甚至文件大小发生变化时,更改时间(ctime)会被更新。

14410

Rclone中文文档

检查程序在同步期间对文件进行等同性检查。对于某些存储系统(例如S3, Swift, Dropbox),这可能需要很长时间才能并行运行。默认是并行运行8个检查程序。...远程不支持设置修改时间并且需要比检查文件大小准确的同步时,这非常有用。 当在对象上存储相同散列类型的远程之间进行传输时,这非常有用,例如Drive和Swift。...需要注意的是,使用积压时,它将以数字N单位kb的内存顺序完成。 设置N的值越大则rclone可以能够准确地计算待处理文件的数量,并能够更精准地预估完成时间。...3.49 -u, –update 该参数会强制rclone跳过目标上存在的任何文件,并且修改时间比源文件更新。如果现有目标文件的修改时间与源文件的修改时间相等,则在大小不同时将更新。...转移到不直接支持MOD时间的云存储时,这很有用,因为它比–size-only检查准确,比使用–checksum更快。

20.3K53
  • Linux项目自动化构建工具-makeMakefile

    一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行复杂的功能操作。...clean没有依赖的文件,所以后面不接文件名,下面同样是依赖方法。而 .PHONY:  则是将clean修饰成目标。...这就是因为我们用 .PHONY 将它设置成了目标目标的特性是:总是被执行。 那么 make 是如何识别文件是不是最新的呢?...access:是进入文件的时间,但是一个系统运行起来的时候,同时会进入非常多的文件,如果每进入一次,就修改大量文件的时间,那么也太浪费性能了,所以就规定了一段时间进入了一定次数后改时间。...当可执行文件生成的时候会得到这三个时间,如果我们源文件修改了,时间也会刷新,文件的内容修改时间要比可执行文件的时间晚的时候,那么这时候我们输入 make 才会重新编译。

    77840

    Linux项目自动化构建工具-makeMakefile

    ,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行复杂 的功能操作 makefile 带来的好处就是 ——“ 自动化编译 ” ,一旦写好,只需要一个 make 命令,整个工程完全自动编译...6.项目清理 此时我将这个程序运行起来,就可以直接运行了,因为这是一个编译好的可执行程序,但是这是一个临时文件,这就意味着我们也需要一个方法能够清理掉这个文件。...但是一般我们这种 clean 的目标文件,我们将它设置为目标 , 用 .PHONY 修饰 , 目标的特性是,总是被 执行的。 在命令行中使用make clean这个命令就可以删掉了....编译命令,那么就需要make mytest行。...因为内容的改变会导致文件的大小发生变化,那么就意味着属性发生了改变。 结论:通常内容和属性是一起改变的,而属性是单独改变的。

    11210

    【Linux】Linux 项目自动化构建工具 -- makemakefile 的使用

    比如哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行一些复杂的功能操作。...clean 表示其是一个目标,总是被执行 (具体细节下文解释)。....PHONY 将其设置为目标目标的特性是:该目标文件总是被执行。...,而是累积一定访问次数或者累积一段时间更新: 而 make 则是根据可执行程序的修改时间 (modify time) 与源文件的修改时间的对比来判断源程序是否需要重新编译: 注:make 判断源文件是否需要重新编译只与源文件的修改时间变动有关...,.PHONY 的原理和作用也显而易见了 – 被 .PHONY 修饰的目标文件不根据文件的修改时间先后来判断是否需要重新执行,从而达到总是被执行的效果。

    1K00

    【Linux】常用工具(下)

    ,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行复杂的功能操作。...则是相应依赖关系的依赖方法,即解决方法,即怎样才能让 test.c 得到 mytest. .PHONY 是定义一个目标 clean,目标的特性是总是被执行的,这个特性我们稍后再介绍。...目标 我们上面所说的 .PHONY: 后面所跟的就是目标,一般我们这种 clean 的目标文件,我们将它设置为目标,用 .PHONY 修饰,目标的特性是:总是被执行的。...(2)那么为什么不是目标就不能总是被执行呢?...,那么 mytest 文件的修改时间还是大于 test.c 文件的修改时间,此时编译不通过,如下图: 当我们对 test.c 文件进行修改,更新了它的修改时间,此时 test.c 的修改时间 > mytest

    20010

    Golang之go module开发系列二--使用版本和GoCenter

    目标提交之前的最新版本提交是vX.Y.Z-pre时, · vX.Y.(Z + 1) 0.yyyymmddhhmms -abcdefxyz。...目标提交之前的最新版本提交是vX.Y.Z时, 作为一种最佳实践,版本字符串不应该是手工输入的。go命令将接受普通的提交散列并自动将其转换为版本。此方法有助于根据生成的时间戳比较修订。...· 对应的主要版本需要版本,并且基础模块没有go.mod文件时,版本包含“ +不兼容”( ‘+incompatible’)后缀 · 即使从代理解析了模块之后,go客户端也会尝试从校验和服务器获取校验和内容...如果go.mod文件require指令的版本不正确,可以通过以下方法更正此错误: 1. 用提交哈希字符串替换完整的版本引用4 运行go mod tidy以使go客户端执行正确的替换。 [if !...错误消息是有效的UTF-8且由垄断图形字符和空格组成时,才会显示错误消息。 和GoCenter一起前进 随着Go模块获得更大的接受度,标准肯定会改变。

    2.1K00

    【Linux操作系统】自动化编译make和Makefile

    Linux环境下开发,工程源文件较少时,可使用gcc直接编译;但工程源文件较多时,gcc直接编译复杂(比如命令较多,文件的编译先后顺序确定问题等)且不易于后期项目的维护,因此采用make/makefile...3.目标 介绍目标前我们先讲一讲实目标的概念: 实目标:命令执行后真正要生成的文件名, test就是实目标 目标:命令执行后不会生成实际文件,常用于辅助操作, .PHONY是目标的标注符...,clean是目标,不会生成实际名为clean的文件....目标的特点:目标可以总是被执行[为什么后面讲] 4.其他规则 变量名 含义 $@ 目标文件,可表示test $^ 所有的依赖文件,可表示test.c $< 第一个依赖文件 test:test.c...,比如mv/chmod等 因为文件一定要被访问,才能完成文件内容的修改,所以Modify更新,Access一定也会更新 因为文件内容被修改,文件大小一定发生改变,所以Modify更新,Change

    85040

    【linux】gcc makefile

    性能:在某些情况下,静态链接的应用程序启动和运行速度可能会更快,因为避免了运行时解析库符号的开销。 缺点: 文件大小:可执行文件会包含所有静态链接的库的代码,这会显著增加文件大小。...make工具使用文件的时间戳来决定哪些目标需要重新构建。具体来说,make会比较目标文件和其依赖文件的修改时间戳。如果依赖文件目标文件更新,则目标文件需要重新构建。...这个机制是通过以下步骤实现的: 依赖关系解析:make读取Makefile并解析目标文件及其依赖文件的关系。 时间戳比较:make比较目标文件和依赖文件的修改时间戳。...如果依赖文件的时间戳比目标文件新,则认为目标文件需要重新构建。 清理目标 clean: 目标声明,确保 clean 作为命令,不是物理文件。...执行 make clean 时,命令 rm -f mytest 会运行,删除 mytest。 这用于清理生成的文件,使工作目录恢复到干净状态。

    5310

    快速上手makefile自动化构建工具

    文件被访问时,这个时间会被更新。 Change(变更时间):文件的属性被改变时,那么Change这个时间就会被更新。 Modify(修改时间):代表文件内容的最后修改时间。...文件的内容被修改时,这个时间就会被更新。...我们可能新增了、删除、修改了代码,这些操作很有 可能让我们文件的大小发生变化,所以 Change的时间也会跟着改变。   ...其实也是有的,这里就需要补充一点新的语法: .PHONY:目标文件#修饰目标文件,使之成为目标,总是被执行   可以看到,加上 .PHONY 修饰之后,我们make就可以多次使用了,其实修饰目标就是...而我们一般遵循着目标修饰清理工作,编译工作还是交给编译器的选择,以时间的更新来判断执不执行make,但是 清理工作是一定要执行 的,所以我们 通常把.PHONY修饰需要清理的目标文件

    12910

    Rsync 数据同步工具

    与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件传输有变动的部分(默认规则是文件大小或修改时间有变动)。...在同步备份数据时,默认情况下rsync通过独特的“quick check” 算法,它同步大小或者最后修改时发生变化的文件或目录,当然也可以是根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分...当然,也可以通过在rsync命令行中指定某些选项来改变quick check的检查模式,比如"–size-only"选项表示"quick check"将检查文件大小不同的文件作为待传输文件。...同步模式 在文件确定要被同步后,在同步过程发生之前要做哪些额外工作。例如上文所说的是否要先删除源主机上没有但目标主机上有的文件,是否要先备份已存在的目标文件,是否要追踪链接文件等额外操作。...相对来说,为rsync手动指定同步模式的选项常见一些,只有在有特殊需求时指定检查模式,因为大多数检查模式选项都可能会影响rsync的性能。

    3K30

    Make

    .PHONY:clean clean: -rm -rf *.o .PHONY的依赖文件目标,作用是目标的命令即使在当前目录下存在与目标同名的文件时也执行该命令。...多个目标: 一个规则中可以有多个目标,这些目标有相同的依赖文件 搜索目录: 通常在一个大的项目中,会把头文件、源文件、库文件放在不同的目录下。目录发生改变后,只需改变依赖文件的搜索目录。...$@:表示一个规则中的目标文件名。 $%:规则中的目标文件是一个静态库文件时,$%就代表静态库的一个成员名。如果目标不是静态库文件,则该变量 值为空。...$<:规则中的第一个依赖文件名。 $>:规则是一个静态库文件时,该变量表示静态库名。 $?:所有比目标文件新的依赖文件列表,以空格分隔。...-t:把所有目标文件的最后修改时间设置为当前系统时间。 -v:打印make版本信息。

    2K100

    【Linux】————Makefile编写

    1.GCC常见命令 1.1 查看gcc版本号 1.2 GCC输出目标文件 可以使用gcc code.c -o code用于输出目标文件 1.3 编译流程 GCC编译器的编译流程是:预处理、编译 、汇编和链接.../执行这个文件,发现程序成功运行了. 3. .PHONY 那如果我们想清理某个文件,该怎么写呢?既然是清理文件那还需要依赖什么文件删除吗? 这个时候需要用一个东西叫 .PHONY目标....因为我们clean目的是清除某些文件,而删除操作又不会需要依赖文件,所以会创建一个目标,相当于依赖这个目标,然后执行依赖方法....退出vim,执行make clean 我们发现mytest文件被删除了. 还有一个作用就是总是被执行. 什么叫总是被执行呢?先来看如果我们一直make会发生什么呢?...Modify: 最近的内容修改时间,比如你修改了文件的内容,这个时间就会改变. Change:最近的属性修改时间,比如你修改了这个文件的读写权限,这样它的属性修改时间就会被修改.

    6910

    Linux之make和makefile及其拓展

    在一个大型工程项目中,通常存在多个源文件,那么这些文件哪些是要被先编译,哪些后编译,或者说某些文可能会重复编译。...目标 为什么多次make会失败,但是多次make clean却能一直成功?...观察makefile文件发现:clean用.PHONY修饰了,而mytest没有 被.PHONY所修饰的就是目标,而目标可以不遵守规则,因此可以多次反复执行。...三个时间 不加目标make无法多次执行的原因在于目标文件没有更新,不用重新编译(在一些大型工程项目中,仅是编译的过程就可能要耗费数十分钟甚至几小时) 那么它怎么知道我没有更新目标文件呢?...文件进行过修改,也就需要重新编译,此时就可以再次执行make 拓展 Access是访问时间,Modify是文件内容更改时间,Change是文件属性更改时间。

    3.8K00

    关于Alluxio中元数据同步的设计、实现和优化

    元数据同步为什么在Alluxio中很重要 在Alluxio中,元数据指的是Alluxio文件系统中文件和目录的信息,包括它们的所有者、组、权限、创建以及修改时间等信息。...某些用户在Alluxio中列出“/”目录或尝试访问“/file”时才会识别此文件。这种“惰性”行为可以防止不必要的工作并能显著提高性能,因为底层存储中的元数据操作可能很慢。...因此,在这种情况下,从技术上来讲我们可以比同步间隔频繁地重新同步。...例如,可以运行“bin/alluxio fs loadMetadata /path/to/sync”来强制更新Alluxio路径“/path/to/sync”的元数据; 对于基于Alluxio文件系统...LoadMetadataPType为ONCE时,只会为每个目录加载一次元数据。这影响这两个文件系统的调用,并且仅在未发生同步时考虑此选项。

    1K30

    Linux 下的make命令与Makefile

    一般是是源文件(或依赖文件),Make会根据规则推导来运行依赖于这个文件的命令,一般来说,可以和“-n”参数一同使用,来查看这个依赖文件发生的规则命令。...-q, –question 不运行命令,也不输出。仅仅是检查所指定的目标是否需要更新。如果是0则说明要更新,如果是2则说明有错误发生。...如果没有“-n”那么就像运行UNIX的“touch”命令一样,使得;的修改时间为当前时间。...有一点需要注意的是,% 的展开发生在变量和函数的展开之后,变量和函数的展开发生在make载入Makefile时,而模式规则中的% 则发生运行时。...下面是所有的自动化变量及其说明: •@ : 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,@ 就是匹配于目标中模式定义的集合。 •% : 目标是函数库文件中,表示规则中的目标成员名。

    10.2K20

    Go 项目使用 Makefile

    02 make 和 Makefile make 命令行工具可以自动判断是否需要重新编译程序,实际上 make 不仅限于程序,我们可以使用它来描述任何任务,只要其他文件发生更改,某些文件就必须从其他文件自动更新...使用 make 命令行工具,运行目标”build。 make build 运行 make build,终端打印出 Makefile 中“目标” build 的命令。...需要注意的是,如果有文件名和“目标”同名,那么该“目标”无法使用 make 命令执行指定的 command。...因为 make 发现与“目标”同名的文件已存在,将不会再重新构建,所以就不会运行指定的 command,为了避免出现该问题,可以使用内置目标名.PHONY声明这些“目标”名是“目标”,而不是与“目标...Make 命令运行时,如果不指定“目标”,默认执行 Makefile 文件的第一个“目标”。

    1.9K20

    Linux:常用软件、工具和周边知识介绍

    如果任何一个依赖关系发生了变化(例如,文件已被修改),则目标文件将被重新生成。 依赖方法: 依赖方法指定了如何生成目标文件,即构建目标文件所需的命令或操作。...上面的例子里: 在这个简单的Makefile中,存在一个目标文件 test_make 和一个目标文件 clean。...如果源文件的修改时间比目标文件的修改时间更晚,或者目标文件不存在,make 工具会执行构建该目标文件的命令。...否则,如果目标文件的修改时间比源文件的修改时间更晚,make 工具认为该目标文件是最新的,不需要重新构建。 对于可执行文件来说,make 工具也会比较可执行文件和它所依赖的源文件的修改时间。...在 Makefile 中,使用 .PHONY 来声明一个目标目标。这样, make 命令执行时,就会忽略目标对应文件的存在与否,直接执行后续定义的命令。

    23110

    rsync 用法教程

    与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件传输有变动的部分(默认规则是文件大小或修改时间有变动)。...注意,-r是必须的,否则 rsync 运行不会成功。source目录表示源目录,destination表示目标目录。 如果有多个文件或目录需要同步,可以写成下面这样。...四、排除文件 4.1 --exclude 参数 有时,我们希望同步时排除某些文件或目录,这时可以用--exclude参数指定排除模式。...默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。...--suffix参数指定文件名备份时,对文件名添加的后缀,默认是~。 -u、--update参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。 -v参数表示输出细节。

    1.9K20
    领券