phn*_*nah 7 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
Run Code Online (Sandbox Code Playgroud)
当我调用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
Run Code Online (Sandbox Code Playgroud)
为什么$()没有工作但是``呢?仅适用于"git"命令.
请注意,在我的Makefile中,我通常在许多规则中使用$().
谢谢 :)
Eld*_*mov 10
在食谱内部你必须逃避美元符号才能让它们被shell解释.否则,将处理$(git ...)作为内置命令或变量并尝试对其进行评估(当然,不成功).
check_branch:
if [ "$$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \
...
小智 5
在 shell 行中,您可以像在 shell 脚本中一样编写 shell 命令。这就是第二个操作起作用的原因。
如果您希望 Make 在 shell 之外评估 git 命令,您可以将操作包含在 shell 函数中,如下所示:
$(shell git rev-parse --abbrev-ref HEAD)
Run Code Online (Sandbox Code Playgroud)
你应该很高兴去,尽管我经常将这种事情实现为:
branch := $(shell git rev-parse --abbrev-ref HEAD)
target:dep
mkdir -p build/$(branch)
Run Code Online (Sandbox Code Playgroud)
或类似的规定。