【发布时间】:2020-01-19 04:55:15
【问题描述】:
我正在尝试编写一个使用特定于目标的变量的 makefile,但是虽然在每个目标和先决条件主体中正确设置了变量,但先决条件列表本身并未使用变量更新,从而导致错误的先决条件被检查和调用。
如何更新先决条件中的目标特定变量?
在下面的示例中,make foo 和 make bar 都应该打印“world”,但 make foo 打印“hello”。
X=hello
hello:
echo "hello"
world:
echo "world"
foo:X=world
foo:$(X)
bar:X=world
bar:
make $(X)
我试图实现的目标是不同的目标将构建相似的先决条件 - 相同的文件,在不同的文件夹中 - 通过将文件夹作为特定于目标的变量传递。问题在于,如下例所示,如果首先调用一个目标(在示例中为foo),则调用第二个目标将不会执行任何操作。
DIR=fooDir
FILE=$(DIR)/filename
$(FILE):
touch $(FILE)
echo $(FILE)
foo: $(FILE)
bar:DIR=barDir
bar: $(FILE)
【问题讨论】:
-
永远不要在 make 中直接调用 make,因为变量不会传播到子 make。改用 $(MAKE)。 gnu.org/software/make/manual/html_node/MAKE-Variable.html