Git Makefile$(command)不工作,但'command'不工作
问题是,当我为我的项目编写一个Makefile时,当我需要检测当前的分支名称时,在make规则中,我这样做了: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
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 \
...