【问题标题】:How to tell make to never re-make prerequsities?如何告诉 make 永远不要重新制作先决条件?
【发布时间】:2021-12-12 20:22:46
【问题描述】:

我有一个 Makefile,其中有 a: bb: c。当我在 b 存在的情况下运行 make a 时,我希望即使 c 不存在,Make 也会单独离开 b。但似乎 GNU Make 一路向上,并从有问题的最上游父级开始重新制作所有内容。

有一个标志 --always-make 导致 Make 总是重新制作所有先决条件,即使不需要。不幸的是,似乎没有 --never-make 标志永远不会重新制定任何先决条件,即使需要。有没有一种通用的方法可以让我获得这种行为?

一些看似不合适的可能解决方案:

  • touch逐个处理每个文件很乏味,并且在丢失文件的情况下,会导致空的“假”文件,我觉得这太hacky了
  • 注释掉 a: #b 中的 prereq 会破坏像 touch $< 这样的变量。
  • 注释掉b: 的规则是可行的,但通常文件中散落着很多b,所以注释很多,也很乏味

【问题讨论】:

  • 不,没有可供您使用的 make 选项。你将不得不修改你的 Makefile,即使它很乏味,或者 touch --date=very-long-time-ago c 对于所有 c 先决条件。

标签: makefile


【解决方案1】:

如果您确定不需要重新创建 c 可能:

a:  b
    echo a

b:  c
    echo b

c:
    [ -e b ] || ( generate c... )

在目标c 中,我们检查b ([ -e b]) 的存在,如果是,我们什么也不做(否则generate c...)。

c 目标在c 不存在但如果b 也不生成c 时运行(我认为在您的情况下需要很多时间)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多