有没有办法将bash变量捕获到配方中的make变量中。我正在尝试这样的事情:
all:
VER=$$(cat file.txt) && echo This is $${VER} \
foo=$${VER}
echo Hey $$(foo) !
我收到错误:
VER=$(cat file.txt) && echo This is ${VER} \
foo=${VER}
This is 100 foo=100
echo Hey $(foo) !
/bin/sh: 1: foo: not found
Hey !
我认为正确捕获了VER
bash变量,但我想将其捕获到配方中的make变量中?
答案 0 :(得分:0)
简短的回答是,你真的不应该这样做而且它已经接近不可能了。如果你告诉我们你真正要做的事情,我们可以帮助你更多...这对我来说就像XY problem。
GNU make(但不是其他版本的make)确实有一种可行的方式,但有一些注意事项。但是,我重申这是一个非常糟糕的主意,你不应该这样做。不过,这将有效:
all:
$(eval VER := $$(shell cat file.txt))
echo This is $(VER)
有一点需要注意,在运行配方的任何其他部分之前,会发生。例如,这不会起作用:
all: clean
echo hello > file.txt
$(eval VER := $$(shell cat file.txt))
echo This is $(VER)
clean: ; rm -f file.txt
在配方的任何部分开始之前调用eval
。