加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 我可以告诉Make忽略环境变量吗?

发布时间:2020-12-15 22:57:30 所属栏目:安全 来源:网络整理
导读:我最近使用Make时遇到了一些奇怪的行为(v3.81). 假设我有以下Makefile: FOOBAR = $(shell find nonexistentdirectory -iname "foobar" | tr 'n' ' ')all: @echo "Hi"clean: @echo "Hi again" 看起来很简单吧?值得注意的是,FOOBAR是一个“递归扩展变量”,
我最近使用Make时遇到了一些奇怪的行为(v3.81).

假设我有以下Makefile:

FOOBAR = $(shell find nonexistentdirectory -iname "foobar" | tr 'n' ' ')

all:
    @echo "Hi"

clean:
    @echo "Hi again"

看起来很简单吧?值得注意的是,FOOBAR是一个“递归扩展变量”,因此在我引用之前不应对其进行评估.请注意,我从不提及它.另请注意,nonxistentdirectory不存在,如您所料.

现在假设我在调用Make目标之前在shell中设置了FOOBAR:

compy386$FOOBAR="stuff" make clean
find: nonexistentdirectory: No such file or directory
Hi again

为什么评估FOOBAR?显然,它与变量在shell中定义的事实有关.我是否应该预料到用户可能在shell中设置了变量?我在这做错了什么?!

解决方法

正在评估FOOBAR,因为您正在运行一个配方(用于清理),并且在进入的环境中存在FOOBAR.由于FOOBAR在进入环境时存在,因此它成为导出变量,这意味着make将其作为环境的一部分提供给配方中的任何程序. make不是特殊情况的回声;它只是使用你路径中找到的那个.并且它无法知道该实用程序是否将引用特定的环境变量,因此它必须导出所有导出的变量,这意味着它必须评估FOOBAR.

(官方说法,请参阅制作手册中的第Variables from the Environment段第3段.另请参阅recursive make invocation的食谱.)

要回答直接问题,你可以告诉make忽略变量来自环境的事实,这样它就不会通过取消导出它来重新导出它:

unexport FOOBAR

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读