我的makefile中有一个变量我想要取消设置或重新定义,因此目标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 ...
在指定目标时如何取消设置或重新定义MY_VARIABLE(在这种情况下,如foo)?
编辑
这是我想避免的情况:
dist: a b c foo: a_foo b_foo c_foo a: make -C a/src ... a_foo make -C a_foo/src
我只是希望目标为我的特定变量使用不同的值,以便在该目标的makefile中以不同方式处理编译.
此外,它看起来不像我可以导出或取消设置目标中的变量.例如:
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
如果我尝试这样做,我会在导出MY_VARIABLE =’true’行上得到类似于以下错误的内容(同样如果我尝试使用unset):
Makefile:16: *** unterminated variable reference. Stop.
这有助于澄清我正在尝试做什么吗?
编辑2
我尝试了一个触摸文件的目标,并尝试运行子目标的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语句,那么我可以触摸该文件而不会收到错误消息,但我无法触发创建目标,所以这似乎没有帮助.
foo: prep_foo a prep_foo: touch a/src/.foo
是否有使用触摸来传达状态到子目标的示例?