如何设置只运行一次的组配方?

问题描述 投票:0回答:2

假设我有一个接受一组先决条件的食谱:

prereqs=a b c

$(prereqs):
  bash configure.sh

我希望任何

a b c
都能触发
bash configure.sh
,但我希望它只运行一次。

我知道还有其他方法可以解决这个问题。我知道有一些装饰器可以应用于导致各种行为的规则。

在这个问题的调用中,是否有某种方法可以使 make 仅评估配方一次?

makefile gnu-make
2个回答
0
投票

结果就像使用分组食谱一样简单:

$(prereqs) &:
   bash configure.sh # runs only once

0
投票

我不知道你所说的“装饰者”是什么意思,也不知道你所说的“在这个问题的调用范围内”是什么意思,所以我无法决定你已经知道什么以及你的限制是什么一个答案。

如果您能保证您使用的是 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 $@

别忘了上面的分号,很重要!

© www.soinside.com 2019 - 2024. All rights reserved.