如何为所有make目标将shell命令的输出分配给Makefile变量?

时间:2019-05-15 00:24:34

标签: bash makefile gnu-make

我有一个随机字符串,该字符串已生成并用于多个make目标。我的Makefile如下:

VALUE := $(shell strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n')

target_0:
  echo ${VALUE}
  $(MAKE) target_1

target_1:
  echo ${VALUE}

我希望VALUE在所有目标中都相同(设置一次,并在整个文件中引用其值),但是在我当前的实现中,我得到以下信息(值不同):

K29p6whTYtrNIrzkaNkF75qtc2YQEq
hcXH00hzYMRa36hp55wBKCRH0YfJvp

如何在VALUE的顶部设置Makefile,以便仅对所有目标进行评估和设置一次,而不是每次调用目标时都要对其进行设置?

1 个答案:

答案 0 :(得分:1)

$(MAKE) target_1是一个递归的make调用,是全新的make流程,从顶部开始读取Makefile

如果您真的想这样做,可以将VALUE=${VALUE}传递给递归make,它将优先于:=分配,

        $(MAKE) target_1 VALUE=${VALUE}

作为递归的一种替代方法,您可以使用依赖项在另一个规则之后调用一个规则,

target_0: target_1
         ...