The thing is when I was writing a Makefile for my project, when I needed to detect the current branch name, in a make rule I did this :
check_branch:
if
In shell lines, you write shell commands as you would in a shell script. That's why the second operation works.
If you want Make to evaluate git command outside of the shell, you can enclose the operation in a shell function, as in:
$(shell git rev-parse --abbrev-ref HEAD)
And you ought to be good to go, though I often implement this kind of thing as:
branch := $(shell git rev-parse --abbrev-ref HEAD)
target:dep
mkdir -p build/$(branch)
Or something along those lines.