если условие в функции - Makefile - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю с makefile, и такие простые вещи, как условия if, не совсем понятны.это дает мне ошибку, которая не читается.Есть идеи, что случилось с моей следующей маленькой функцией?

prepare-test-example:
    ifeq ($(ENGINE),'aurora-postgresql')
        @cat examples/example.yaml > /tmp/stack_test.yaml
    else
        @cat examples/example.yaml examples/example_test.yaml > /tmp/stack_test.yaml
    endif

Вызов:

make test ENGINE=aurora-postgresql
/Library/Developer/CommandLineTools/usr/bin/make prepare-test-example ENGINE=aurora-postgresql
ifeq (aurora-postgresql,'aurora-postgresql')
/bin/sh: -c: line 0: syntax error near unexpected token `aurora-postgresql,'aurora-postgresql''
/bin/sh: -c: line 0: `ifeq (aurora-postgresql,'aurora-postgresql')'
make[1]: *** [prepare-test-example] Error 2

1 Ответ

0 голосов
/ 13 февраля 2019

Вы отступили в ifeq, чтобы он выглядел как make как что-то, что он должен передать оболочке.

Попробуйте либо

ifeq ($(ENGINE),'aurora-postgresql')
     files := examples/example.yaml
else
     files := examples/example.yaml examples/example_test.yaml
endif

prepare-test-example:
    @cat $(files)  > /tmp/stack_test.yaml

, либо

prepare-test-example:
    @if [ "$(ENGINE)" = "'aurora-postgresql'" ]; then \
        cat examples/example.yaml \
    ; else \
        cat examples/example.yaml examples/example_test.yaml \
    ; fi > /tmp/stack_test.yaml

Ради интереса, я реорганизовал перенаправление в последнем примере (сценарий с чистой оболочкой).

Возможно, вы имели в виду ifeq('$(ENGINE)','aurora-postgresql'), который имел бы больше смысла и позволил несколько упростить приведенный выше код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...