我在我的makefile中有一个变量,我想要将其unset
或重新定义,这样目标a
、b
和c
就可以在各自的makefile中使用正确的MY_VARIABLE
值(或者根本不使用)。
如果我运行以下命令make foo
:
export MY_VARIABLE := 'false'
foo: prep_foo dist
prep_foo:
$(shell export MY_VARIABLE='true')
echo ${MY_VARIABLE}
dist: a b c
a:
make -C a/src
b:
make -C b/src
c:
make -C c/src
我收到了这个输出:
export MY_VARIABLE='true'
echo 'false'
false
...
如果我使用以下makefile运行
make foo
:export MY_VARIABLE := 'false'
foo: prep_foo dist
prep_foo:
$(shell unset MY_VARIABLE)
echo ${MY_VARIABLE}
dist: a b c
a:
make -C a/src
b:
make -C b/src
c:
make -C c/src
我得到以下输出:
make: unset: No such file or directory
echo 'false'
false
...
当指定目标(比如在本例中的foo
)时,我该如何取消设置或重新定义MY_VARIABLE
?
编辑
以下是我想要避免的情况:
dist: a b c
foo: a_foo b_foo c_foo
a:
make -C a/src
...
a_foo
make -C a_foo/src
我希望在特定的变量中,
a
目标使用不同的值,以便在该目标的makefile中处理编译时采用不同的方式。此外,看起来我无法在目标内部使用
export
或unset
变量。例如:dist: a b c
foo: a_foo b_foo c_foo
a:
make -C a/src
...
a_foo:
export MY_VARIABLE='true'; make -C a/src
如果我尝试这样做,我会在export MY_VARIABLE='true'
行上得到类似以下错误的内容(如果我尝试使用unset
同样如此):
Makefile:16: *** unterminated variable reference. Stop.
这有助于澄清我想做什么吗?
编辑2
我尝试了一个目标,它touch
一个文件并尝试运行子目标的makefile
(该文件检查文件是否存在):
foo: prep_foo
prep_foo:
touch a/src/.foo
make -C a/src
当我尝试通过 make foo
运行时,我遇到了以下错误:
Makefile:14: *** commands commence before first target. Stop.
如果我从`prep_foo`中删除`make`语句,那么我就可以触摸文件而不会收到错误消息,但是我不能触发制作`a`目标,所以这似乎没有帮助。
以下内容会产生相同的“在第一个目标之前开始命令”错误消息:
foo: prep_foo a
prep_foo:
touch a/src/.foo
有没有使用“touch”将状态传递给子目标的示例?