将 bash 命令的结果分配给 make 中的变量

Assign results of a bash command to a variable in make

我正在尝试让这个 shell 脚本在 make 中工作:

$ VERSION=$(echo 'ThisBuild / version := "1.20"' | grep -e 'This.*version' | grep -Eo '[0-9]+\.[0-9]+')
$ echo $VERSION
1.20

make:

$ make -v
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu

Makefile:

version:

    VERSION=$(echo 'ThisBuild / version := "1.20"' | grep -e 'This.*version' | grep -Eo '[0-9]+\.[0-9]+') && \
    echo "VERSION: ${VERSION}"

无效:

$ make version
VERSION= && \
echo "VERSION: "
VERSION: 

这可以做到吗?

如果您想将 $ 传递给 shell,您必须将其从 make 中转义,方法是将其加倍:$$.

version:
        VERSION=$$(echo 'ThisBuild / version := "1.20"' | grep -e 'This.*version' | grep -Eo '[0-9]+\.[0-9]+') && \
        echo "VERSION: $${VERSION}"

否则,make 会认为您正在引用一个 make 变量并展开它。