Git Makefile$(command)不工作,但'command'不工作

Git Makefile$(command)不工作,但'command'不工作,git,makefile,backticks,Git,Makefile,Backticks,问题是,当我为我的项目编写一个Makefile时,当我需要检测当前的分支名称时,在make规则中,我这样做了: check_branch: if [ "$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \ echo "In master" else \ echo "Not in master"; \ fi 当我调用make check_分支时,“$(git rev parse--abbrev

问题是,当我为我的项目编写一个Makefile时,当我需要检测当前的分支名称时,在make规则中,我这样做了:

check_branch:
    if [ "$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \
    echo "In master"
    else \
    echo "Not in master"; \
    fi
当我调用make check_分支时,“$(git rev parse--abbrev ref HEAD)”不起作用,它返回了“空字符串”。 但是当我将$()改为`时,它工作得非常好

check_branch:
    if [ "`git rev-parse --abbrev-ref HEAD`" == "master" ]; then \
    echo "In master"
    else \
    echo "Not in master"; \
    fi
为什么$()不起作用,但``起作用了?仅适用于“git”命令

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


谢谢:)

在shell行中,您可以像在shell脚本中一样编写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)

或者类似的东西。

在食谱中,你必须避开美元符号,才能让shell解释它们。否则,将
$(git…
视为内置命令或变量,并尝试对其求值(当然,没有成功)

检查分支机构: 如果[“$$(git rev parse--abbrev ref HEAD)”=“master”];然后\ ...
请参阅:。问题在于
$
(美元符号)是
make
的专用符号。如果您使用双美元,它应该可以工作。您还应该注意确保您位于
git
层次结构中的目录中。@artlessnoise:您说得对,非常感谢。:) check_branch: if [ "$$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \ ...