如何避免多次运行虚拟Makefile目标?

如何避免多次运行虚拟Makefile目标?,makefile,Makefile,我想依赖一个只运行一次的虚拟目标 Makefile与我迄今为止尝试的内容: a: b b: c d touch b c: # time consuming task that only needs to run once d: # time consuming task that only needs to run once 当b已经存在时,是否有方法停止依赖关系链?我可以手动清除b以触发重新运行c和d。如果存在b,我希望能够多次运行a,而不触发长时间运行的任务

我想依赖一个只运行一次的虚拟目标

Makefile
与我迄今为止尝试的内容:

a: b

b: c d
    touch b

c:
    # time consuming task that only needs to run once

d:
    # time consuming task that only needs to run once
b
已经存在时,是否有方法停止依赖关系链?我可以手动清除
b
以触发重新运行
c
d
。如果存在
b
,我希望能够多次运行
a
,而不触发长时间运行的任务


我有很多任务,如
c
d
,因此我希望避免在每个单独的任务中触摸一个文件,并且我不希望文件系统被不必要的文件弄乱。

您可以将Makefile编写为:

a: b

b c:
    # time consuming task that only needs to run once
    touch b
make c
将无条件调用您的任务

make b
仅在文件b不存在时执行任务


make a
取决于b,因此任务只在b不存在时执行,

运行,例如,
a
五次,我只希望
b
运行一次。我想你应该澄清这个问题。调用“make a”五次将导致您的“耗时任务”在上面的脚本中只运行一次。太好了!正是我想要的!您说希望
c
的运行取决于
b
是否存在。你还说“我有很多任务,比如
c
,所以我不想每个单独的任务都碰一个文件,也不想让文件系统被不必要的文件弄得乱七八糟。”这看起来很矛盾。
c
是一个在磁盘上生成输入文件的任务,但我不能依赖这些文件是相同的,因此,没有可依赖的物理文件
b
只是将
c
作为先决条件。如果
c
生成的文件集不可预测,那么
b
如何找到它们以利用它们?也许可以在makefile中实现相同的方法来为b编写准确的先决条件。