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

How to assign output of shell command to Makefile variable for all make targets?

我有一个随机字符串生成并用于多个 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

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

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

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

        $(MAKE) target_1 VALUE=${VALUE}

作为递归的替代方法,您可以使用依赖项一个接一个地调用规则,

target_0: target_1
         ...