gpt4 book ai didi

makefile - 仅当文件存在时,如何编写 Makefile 规则以删除文件(干净)?

转载 作者:行者123 更新时间:2023-12-04 04:30:10 28 4
gpt4 key购买 nike

在我看来,Makefile 规则大致可以分为“积极”和“消极”规则:“积极”规则创建丢失或更新过时的文件,而“消极”规则删除文件。

为“肯定”规则编写先决条件非常简单:如果目标和先决条件是文件名,make默认情况下,如果目标丢失或过期(在这种情况下丢失的文件可能被视为无限旧的文件),则默认运行配方。

但是,考虑一个“否定”规则,例如目标 clean .通常的写法似乎是这样的:

clean:
rm -f *.log *.synctex.gz *.aux *.out *.toc

这显然不是最好的方法:
  • rm无事可做也执行,
  • 需要使用 -f 抑制其错误消息和退出状态标志,它有其他(可能是不受欢迎的)效果,以及
  • 目标 clean 无事可做的事实不会向用户报告,这与“积极”目标的正常情况不同。

  • 我的问题是:如何编写由 make 处理的 Makefile 规则仅当某些文件存在时? (比如对 make clean 有用的东西。)

    最佳答案

    how to write a Makefile rule that shall be processed by make only if certain files are present? (Like what would be useful for make clean.)



    你可以这样做:
    filenames := a b c

    files := $(strip $(foreach f,$(filenames),$(wildcard $(f))))

    all: $(filenames)

    $(filenames):
    touch $@

    clean:
    ifneq ($(files),)
    rm -f $(files)
    endif

    示例 session :
    $ make
    touch a
    touch b
    touch c
    $ make clean
    rm -f a b c
    $ make clean
    make: Nothing to be done for 'clean'.

    也许对某些目的有用,但我觉得它是对 make clean 的一种紧张的改进。 .

    关于makefile - 仅当文件存在时,如何编写 Makefile 规则以删除文件(干净)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581943/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com