Как создать make-файл для обмена хитами - PullRequest
0 голосов
/ 07 октября 2019

Я создал pre-commit крючок, который запускает линтер. pre-commit файлы существуют в <project>\.githooks\pre-commit.sh. Теперь я хочу поделиться этим хуком с членами команды через make file

, поэтому в makefile я сделал

.PHONY: all githooks
githooks:
    root="$(pwd)"
    ln -s "$root/.githooks" "$root/.git/hooks"

Я получаю ошибку

$ make githooks
root=""
ln -s "oot/.githooks" "oot/.git/hooks"
ln: oot/.git/hooks: No such file or directory
make: *** [githooks] Error 1

похоже, чтоя не читаю $pwd в переменную и не могу соединить 2 строки. Как бы я это сделал в makefile?


Обновление:

Я изменил ловушку на

githooks:
    root="$$(pwd)"; \
    ln -s "$$root/.githooks" "$$root/.git/hooks"

и вот вывод файла make

[  1:31PM ]  [ ~ ]
 $ make githooks                 
root="$(pwd)"; \
        ln -s "$root/.githooks" "$root/.git/hooks"
[  1:32PM ]  [ ~ ]
 $ find . -maxdepth 1 -type l -ls

Команда find не вернула никаких ссылок. Я попытался git commit, и крюк не получил триггер.

1 Ответ

0 голосов
/ 07 октября 2019

Есть две проблемы.

  1. Каждая строка в рецепте выполняется в отдельной оболочке;root определяется в первой оболочке, но не в оболочке, которая выполняет ln. Весь сценарий должен находиться в одной логической строке рецепта.

  2. $(pwd) пытается развернуть переменную Makefile с именем pwd перед выполнением строки. Чтобы сохранить подстановку команд, удвойте $: $$(pwd). Точно так же, $$root необходим, чтобы передать $root для расширения оболочки. Сейчас $root пытается развернуть переменную Makefile r, которая также не определена, за которой следует буквальный текст oot.

Правильный рецепт будет

githooks:
        root="$$(pwd)"; \
        ln -s "$$root/.githooks" "$$root/.git/hooks"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...