Makefile: синтаксическая ошибка / bin / sh: -c: синтаксическая ошибка: неожиданный конец файла - PullRequest
1 голос
/ 20 июня 2019

У меня есть простой Makefile:

git_repo := some_git_repo

repo: 
    if [ -v $(git_repo) ]; then \
        echo "exists!" \
    else \
        echo "not exist!" \
    fi;

clean: repo

Запуск make clean выдает мне ошибку:

/bin/sh: -c: line 4: syntax error: unexpected end of file
make: *** [repo] Error 2

Я не совсем уверен, что является причиной этой ошибки.Я дважды проверял синтаксис бесчисленное количество раз, проверял много разных вопросов StackOverflow и даже пытался запустить bash-код по правилу repo отдельно, и он отлично работает.Что я здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вам нужны точки с запятой. Эффект "\" заключается в том, чтобы поместить все в одну строку.

repo: 
    if [ -v $(git_repo) ]; then \
        echo "exists!"; \
    else \
        echo "not exist!"; \
    fi;

См. echo теперь заканчивается точкой с запятой.

1 голос
/ 20 июня 2019

В результате обратной косой черты все строки оболочки объединяются в одну длинную строку, а это означает, что для разделения операторов необходимо использовать точки с запятой в конце каждой строки.

if [ -v $(git_repo) ]; then \
    echo "exists!"; \
else \
    echo "not exist!"; \
fi

После обратных косых черт и символов новой строкиудаляются (а $(git_repo) подставляется) оболочка видит:

if [ -v some_git_repo ]; then echo "exists!"; else echo "not exist!"; fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...