Makefile проверяет, существует ли папка и / или файл - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующий Makefile:

build: clean
    ${GOPATH}/bin/dep ensure
    env GOOS=linux go build -o ./bin/status ./lib/status/main.go
    elm-app build

init:
    ${GOPATH}/bin/dep init -v

test:
    env GOOS=linux go test -v ./lib/status

strip:
    strip ./bin/status

clean:
    if [ -f ./bin/status ]; then
        rm -f ./bin/status
    fi

но я получаю

if [ -f ./bin/status ]; then
/bin/sh: 1: Syntax error: end of file unexpected
Makefile:16: recipe for target 'clean' failed
make: *** [clean] Error 2

что мне не хватает?

любой совет очень ценится

1 Ответ

0 голосов
/ 23 ноября 2018

Каждая строка make-файла запускается в отдельной оболочке.Это означает, что ваше правило здесь:

clean:
        if [ -f ./bin/status ]; then
            rm -f ./bin/status
        fi

фактически запускает следующие команды:

/bin/sh -c "if [ -f ./bin/status ]; then"
/bin/sh -c "rm -f ./bin/status"
/bin/sh -c "fi"

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

clean:
        if [ -f ./bin/status ]; then \
            rm -f ./bin/status; \
        fi

Обратите внимание, это означает, что вам также нужно использовать точку с запятой после команды rm, поэтому отделите ее отокончание fi.

Теперь вы получаете вызов оболочки следующим образом:

/bin/sh -c "if [ -f ./bin/status ]; then \
        rm -f ./bin/status; \
    fi"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...