【发布时间】:2013-03-31 12:44:49
【问题描述】:
问题是当我为我的项目编写 Makefile 时,当我需要检测当前分支名称时,在 make 规则中我这样做了:
check_branch:
if [ "$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \
echo "In master"
else \
echo "Not in master"; \
fi
当我调用 make check_branch 时,"$(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 中,我在许多规则中都使用了 $()。
谢谢:)
【问题讨论】:
-
请参阅:Escaping in a Makefile。问题在于
$(美元符号)对于make是特殊的。如果你使用双美元,它应该可以工作。 -
您还应该注意确保您位于
git层次结构中的目录中。 -
@artlessnoise:你说得对,非常感谢。 :)