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.py
和 foo-eggshell.py
生成 egg.log
文件
出于某种原因,当调用此目标时,在生成文件之前调用 eval 语句;失败,egg.log
没有这样的文件
如何确保仅在上述 python 脚本 运行 之后才调用 eval
?
你不能,同样的规则。在 make 中,首先扩展整个配方,然后将配方的每一行传递给 shell。因此,eval
函数在配方的任何部分传递给 shell 之前展开。
我真的不知道你想在这里做什么,但是在食谱 运行 之后调用 eval
的唯一方法是将它放入一个单独的食谱中(也就是说,有一个 运行 是 python 脚本的规则,并将该规则列为在其配方中使用 eval
的规则的先决条件。
一般来说,尝试在配方中使用 eval
并将 make 变量设置为配方生成的值是个坏主意。它可以在非常特殊的情况下工作,但也有局限性。
.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.py
和 foo-eggshell.py
生成 egg.log
文件
出于某种原因,当调用此目标时,在生成文件之前调用 eval 语句;失败,egg.log
如何确保仅在上述 python 脚本 运行 之后才调用 eval
?
你不能,同样的规则。在 make 中,首先扩展整个配方,然后将配方的每一行传递给 shell。因此,eval
函数在配方的任何部分传递给 shell 之前展开。
我真的不知道你想在这里做什么,但是在食谱 运行 之后调用 eval
的唯一方法是将它放入一个单独的食谱中(也就是说,有一个 运行 是 python 脚本的规则,并将该规则列为在其配方中使用 eval
的规则的先决条件。
一般来说,尝试在配方中使用 eval
并将 make 变量设置为配方生成的值是个坏主意。它可以在非常特殊的情况下工作,但也有局限性。