eval func not 运行 在 make 配方中顺序

eval func not run sequentially in make receipe

.PHONY: set-var
set-var: 
        set -e; \
        $(foreach fru, $(mylist), \
          if [ -z ${eggshell} ]; then \
            $(PYTHON) foo.py \
          else \
            $(PYTHON) foo-eggshell.py \

          fi;) \
        $(eval egg_number = $(shell cat egg.log))

foo.pyfoo-eggshell.py 生成 egg.log 文件 出于某种原因,当调用此目标时,在生成文件之前调用 eval 语句;失败,egg.log

没有这样的文件

如何确保仅在上述 python 脚本 运行 之后才调用 eval

你不能,同样的规则。在 make 中,首先扩展整个配方,然后将配方的每一行传递给 shell。因此,eval 函数在配方的任何部分传递给 shell 之前展开。

我真的不知道你想在这里做什么,但是在食谱 运行 之后调用 eval 的唯一方法是将它放入一个单独的食谱中(也就是说,有一个 运行 是 python 脚本的规则,并将该规则列为在其配方中使用 eval 的规则的先决条件。

一般来说,尝试在配方中使用 eval 并将 make 变量设置为配方生成的值是个坏主意。它可以在非常特殊的情况下工作,但也有局限性。