Makefile gmake:如何从shell命令分配全局变量?
我有一个执行一些shell命令的makefile,我想将输出存储到一个全局变量:Makefile gmake:如何从shell命令分配全局变量?,makefile,gnu-make,Makefile,Gnu Make,我有一个执行一些shell命令的makefile,我想将输出存储到一个全局变量: GLOBVAR = a all: GLOBVAR=$(shell echo 'X') $(info $(GLOBVAR)) GLOBVAR为空。我做错了什么?您混淆了make和shell变量。在GLOBVAR=$(shell echo'X')中,它是一个您分配的shell变量,而在$(info$(GLOBVAR))中,它是一个您展开的make变量 请尝试以下方法: GLOBVAR = $(she
GLOBVAR = a
all:
GLOBVAR=$(shell echo 'X')
$(info $(GLOBVAR))
GLOBVAR
为空。我做错了什么?您混淆了make和shell变量。在GLOBVAR=$(shell echo'X')
中,它是一个您分配的shell变量,而在$(info$(GLOBVAR))
中,它是一个您展开的make变量
请尝试以下方法:
GLOBVAR = $(shell echo 'X')
all:
$(info $(GLOBVAR))
<>但是你的Mag文件还有几个其他问题,你应该考虑。
$(shell…
,因为配方已经是shell脚本。因此,如果要在配方中分配shell变量,只需:
all:
GLOBVAR="$$(echo 'X')"
请注意$
以避免make在将配方传递到shell之前执行的扩展
all:
GLOBVAR="$$(echo 'X')"; echo $$GLOBVAR
(关于$$
的备注与前面相同)。如果愿意,可以使用行延续:
all:
GLOBVAR="$$(echo 'X')"; \
echo $$GLOBVAR
eval
make函数,但我强烈建议您不要这样做,直到您完全理解make何时做什么:
$ cat Makefile
.PHONY: all lla
all:
$(eval GLOBVAR = $(shell echo 'X'))
@echo all: $(GLOBVAR)
lla:
@echo lla: $(GLOBVAR)
$ make all
all: X
$ make lla
lla:
$ make all lla
all: X
lla: X
$ make lla all
lla:
all: X
我让你想象一下平行制造的结果会是什么。。。总之,如果您开始在菜谱中使用make函数,您可能正在进入危险区域