如何避免多次运行虚拟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编写准确的先决条件。