Как запустить случай переключения оболочки / bash в присваивании переменной Makefile? - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь запустить случай переключателя bash в глобальной переменной make. Сам коммутатор работает нормально:

#!/bin/bash

case "$(uname -s)" in CYGWIN*|MINGW*|MSYS*) echo "Hi!";; esac;
# Hi!

Я пытался использовать этот ответ в качестве примера: Назначить значение переменной makefile для результата команды bash? , но когда я поставил внутри VARAIBLE := $(shell thing) у меня неправильный синтаксис:

SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c ${SHELLFLAGS}

IS_UNIX := $(shell case "$$(uname -s)" in CYGWIN*|MINGW*|MSYS*) printf "Hi!";; esac;)

all:
    echo IS_UNIX ${IS_UNIX}

# /bin/bash: -c: line 0: syntax error near unexpected token `newline'

echo IS_UNIX и printf "Hi!" - просто глупые вещи, чтобы сделать этот пример простым. В моем реальном коде я использую их так:

...
ifeq (${OS},Windows_NT)
    ifndef PYTHON_BIN
        PYTHON_BIN := $(shell which python)
        IS_UNIX := $(shell case "$$(uname -s)" in CYGWIN*|MINGW*|MSYS*) printf "Hi!";; esac;)

        ifneq (,${IS_UNIX})
            PYTHON_BIN := $(shell cygpath -w "${PYTHON_BIN}") 
        endif   
    endif
else
    ...

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Проблема в несбалансированных скобках в регистре. К счастью, поскольку вы используете bash, вы можете использовать слегка измененный синтаксис регистра и выполнить:

IS_UNIX := $(shell case "$$(uname -s)" in (CYGWIN*|MINGW*|MSYS*) ...
0 голосов
/ 22 марта 2020

Я просто заставляю его работать, помещая регистр переключателя bash в переменную перед его оценкой:

SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c ${SHELLFLAGS}

IS_UNIX_COMMAND := case $$(uname -s) in CYGWIN*|MINGW*|MSYS*) printf Hi;; esac;
IS_UNIX := $(shell ${IS_UNIX_COMMAND})

all:
    echo IS_UNIX ${IS_UNIX}

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