我的 makefile 中有一个变量,我想unset
重新定义或重新定义,以便 target a
,b
并在各自的 makefilec
中使用正确的值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
...
相反,如果我make foo
使用以下 makefile 运行:
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
我只希望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
-es 文件并尝试运行子目标的目标makefile
(检查文件是否存在):
foo: prep_foo
prep_foo:
touch a/src/.foo
make -C a/src
当我尝试通过 运行它时make foo
,我收到以下错误:
Makefile:14: *** commands commence before first target. Stop.
如果我从中删除make
语句prep_foo
,那么我可以touch
在没有收到错误消息的情况下创建文件,但我无法触发创建a
目标,所以这似乎没有帮助。
以下产生相同的commands commence before first target
错误消息:
foo: prep_foo a
prep_foo:
touch a/src/.foo
是否有使用touch
将状态传达给子目标的示例?