export HELLO=Hello,world
all:
@echo $(HELLO)
@echo $(shell echo $$HELLO)
@echo `echo $$HELLO`
输出:
Hello,world
Hello,world
为什么反引号和$(shell)之间存在差异,是否有办法将环境变量传递给$(shell)调用?
我正在尝试在交叉编译环境中使用pkg-config,所以我需要设置$ PKG_CONFIG_SYSROOT。我可以使用反引号,但它为每个.o文件执行一次。根据{{3}},我需要使用PKG_CFLAGS:= $(shell pkg-config $(PACKAGES)),但我无法传递所需的环境变量以使其正常工作。
在GNU Make 4.0上测试。
答案 0 :(得分:2)
恭喜您遇到了制作错误:$(shell) doesn't honor export but this is undocumented?
代码中有一条评论(在提交故障单之前,并在故障单中引用),表示存在无法正常工作的复杂情况,因此看起来它还没有完成。
我可以想到两种方法让$(shell)
环境让您想要手动设置的变量可用。
明确地在$(shell)
上下文中设置它们。
PCVAR:=$(shell PKG_CONFIG_SYSROOT=$(make-level-variable-PKG_CONFIG_SYSROOT) pkg-config ...)
在make
进程环境中设置它们,以便$(shell)
环境正常继承它们。
$ PKG_CONFIG_SYSROOT=/some/path make