-->

Makefile文件$(命令)不工作,但`command`做(Makefile $(command)

2019-08-18 09:08发布

问题是,当我在写我的项目一个Makefile,当我需要检测当前分支名称,在生成规则我这样做:

check_branch:
    if [ "$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \
    echo "In master"
    else \
    echo "Not in master"; \
    fi

当我打电话化妆check_branch中, “$(GIT REV-解析--abbrev-REF HEAD)”没有工作,它返回“”空字符串。 而是当我改变$()``,它的工作完美。

check_branch:
    if [ "`git rev-parse --abbrev-ref HEAD`" == "master" ]; then \
    echo "In master"
    else \
    echo "Not in master"; \
    fi

为什么()不工作$但是``做? 仅适用于“混帐”命令。

请注意,在我的Makefile中,我通常在许多规则使用$()。

谢谢 :)

Answer 1:

里面的食谱,你必须逃离美元符号,以让他们通过shell来解释。 否则,请对待$(git ...)作为一个内置的命令或变量,并试图对其进行评估(当然,失败)。

check_branch:
    if [ "$$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \
    ...


Answer 2:

在外壳线条,你写的shell命令,你会在一个shell脚本。 这就是为什么第二操作工作。

如果你想要做的外壳之外评估git的命令,你可以在一个shell功能封闭操作,如:

$(shell git rev-parse --abbrev-ref HEAD)

你应该是好去,虽然我经常执行这样的事情如:

branch := $(shell git rev-parse --abbrev-ref HEAD)
target:dep
     mkdir -p build/$(branch)

或类似的规定。



文章来源: Makefile $(command) not working but `command` did