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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |