我正在尝试编写一个使用目标特定变量的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)