export HELLO=Hello,world
all:
@echo $(HELLO)
@echo $(shell echo $$HELLO)
@echo `echo $$HELLO`
Run Code Online (Sandbox Code Playgroud)
输出:
Hello,world
Hello,world
Run Code Online (Sandbox Code Playgroud)
为什么反引号和 $(shell) 之间存在差异,有没有办法将环境变量传递给 $(shell) 调用?
我试图在交叉编译环境中使用pkg-config,所以我需要设置$PKG_CONFIG_SYSROOT。我可以使用反引号,但它会为每个 .o 文件执行一次。根据计算 Makefile 变量分配,我需要使用 PKG_CFLAGS := $(shell pkg-config $(PACKAGES)),但我无法传递所需的环境变量以使其正常工作。
在 GNU Make 4.0 上测试。
恭喜您遇到了 make bug:$(shell) 不支持导出,但这没有记录?
代码中有一条注释(在提交票证之前并在票证中引用),它表明在复杂的情况下此操作无法正常工作,因此看起来它还没有完成。
我可以想到两种方法来让$(shell)
环境拥有您想要手动设置的变量。
明确地将它们设置在$(shell)
上下文中。
PCVAR:=$(shell PKG_CONFIG_SYSROOT=$(make-level-variable-PKG_CONFIG_SYSROOT) pkg-config ...)
Run Code Online (Sandbox Code Playgroud)将它们设置在make
进程环境中,以便$(shell)
环境正常继承它们。
$ PKG_CONFIG_SYSROOT=/some/path make
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
56221 次 |
最近记录: |