假设我有一个接受一组先决条件的食谱:
prereqs=a b c
$(prereqs):
bash configure.sh
我希望任何
a b c
都能触发 bash configure.sh
,但我希望它只运行一次。
我知道还有其他方法可以解决这个问题。我知道有一些装饰器可以应用于导致各种行为的规则。
在这个问题的调用中,是否有某种方法可以使 make 仅评估配方一次?
结果就像使用分组食谱一样简单:
$(prereqs) &:
bash configure.sh # runs only once
我不知道你所说的“装饰者”是什么意思,也不知道你所说的“在这个问题的调用范围内”是什么意思,所以我无法决定你已经知道什么以及你的限制是什么一个答案。
如果您能保证您使用的是 GNU Make 4.3 或更高版本,则可以使用
&:
分隔符;这正是它的用途:
prereqs = a b c
$(prereqs) &:
bash configure.sh
如果
&:
是您所说的“装饰器”(这不是 GNU Make 手册中使用的术语)的意思,并且您出于某种原因无法使用它,那么我只知道一个解决方案(假设您希望能够与 -j
一起运行;如果您不想并行运行,那么您的原始 makefile 将正常工作):
prereqs = a b c
$(prereqs): .sentinel ;
.sentinel:
bash configure.sh
touch $@
别忘了上面的分号,很重要!