bash – 重新定义变量的makefile中的条件?

我的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

是否有使用触摸来传达状态到子目标的示例?

解决方法

Makefile中目标之间通信的常用方法是通过文件.只需触摸一个目标中的文件,然后在另一个目标中进行检查.这可以帮助您解决问题吗?

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...