Дело в том, когда я писал Makefile для моего проекта, когда мне нужно было определить текущее имя ветви, в правиле макияжем я сделал это:
check_branch:
if [ "$(git rev-parse --abbrev-ref HEAD)" == "master" ]; then \
echo "In master"
else \
echo "Not in master"; \
fi
Когда я позвонил, сделайте 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 я использовал $() обычно во многих правилах.
Спасибо :)
См.: [Экранирование в файле Makefile] (http://stackoverflow.com/questions/2382764/escaping-in-makefile). Проблема в том, что '' '(знак доллара) является специальным для' make'. Если вы используете двойной доллар, он должен работать. –
Вы также должны позаботиться о том, чтобы убедиться, что находитесь в каталоге в иерархии 'git'. –
@artlessnoise: вы правы, большое спасибо. :) – hanhp