Как я могу использовать оператор case в команде make shell? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть две переменные foo & bar, foo будет иметь значение, тогда как bar может или не может.Я хочу объединить их вместе, разделенные дефисом, если bar имеет значение.У меня есть кое-что, что работает в bash:

$ foo=foo
$ bar=bar
$ case "${bar}" in    "") echo $foo ;;   *) echo ${foo}-${bar}; esac
foo-bar
$ unset bar
$ case "${bar}" in    "") echo $foo ;;   *) echo ${foo}-${bar}; esac
foo

Пока все хорошо.Теперь я хочу сделать то же самое в Makefile, используя make shell function , но не могу понять синтаксис.Здесь демонстрируется проблема:

$ cat Makefile
foobar = $(shell $(case "$${bar}" in    "") echo $${foo} ;;   *) echo $${foo}-$${bar};; esac))

default:
    echo ${foobar}
$ make
/bin/sh: -c: line 0: syntax error near unexpected token `;;'
/bin/sh: -c: line 0: `echo ${foo} ;;   *'
echo  echo ${foo}-${bar};; esac))
/bin/sh: -c: line 0: syntax error near unexpected token `;;'
/bin/sh: -c: line 0: `echo  echo ${foo}-${bar};; esac))'
make: *** [default] Error 2

Как я могу объединить две переменные среды таким образом, чтобы я мог использовать их в своем Makefile?

Я абсолютный нуб, когда дело доходит доmake так что, если я пойду совершенно неправильно, дайте мне знать.ТНХ.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вам не нужно запускать подоболочку только для объединения нескольких переменных:

foobar := $(foo)$(if $(bar),-,)$(bar)

default:
    echo '$(foobar)'

должно работать просто отлично.

Живая демонстрация

0 голосов
/ 04 марта 2019

Вы можете скрыть от Сделать закрывающую скобку в такой переменной:

cp=)
foobar:= $(shell case "$${bar}" in    ""${cp} echo $${foo} ;;   *${cp} echo $${foo}-$${bar};; esac)

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