分配bash变量以在配方中创建变量

时间:2018-03-28 21:26:42

标签: makefile gnu-make

有没有办法将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变量中?

1 个答案:

答案 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