Как написать вложенный, если в makefile? - PullRequest
1 голос
/ 19 февраля 2020

Как использовать несколько вложенных блоков if-then в Makefile?

Например

$(NAMING_SCHEME).$(COMPRESS_TYPE):
ifeq ($(COMPRESS_TYPE),lz4)
    if [ ${LOG_LEVEL} -gt 0 ] ; then \
        @echo hi \
        if [ ${LOG_LEVEL} -gt 1 ] ; then \
            @echo hi again \ 
            if [ ${LOG_LEVEL} -gt 2 ] ; then \
                @echo hi for the last time!!! \ 
            fi; \
        fi; \
    fi; 
endif

Это приводит к

bin/sh: -c: line 2: syntax error near unexpected token 'then'
/bin/sh: -c: line 0: 'ifeq (1, 1)'
make: *** [Makefile:22: program_name.1.2.3.lz4] Error 1

Что я делаю неправильно

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

В соответствии с предложениями бета-версии и vonbrand я смог заставить его работать, спасибо миллион!

ifeq ($(COMPRESS_TYPE),lz4) 
    if [ ${LOG_LEVEL} -gt 0 ] ; then \
        echo 111 ${LOG_LEVEL} ;\
        if [ ${LOG_LEVEL} -gt 1 ] ; then \
            echo 222 ${LOG_LEVEL} ;\
            if [ ${LOG_LEVEL} -gt 2 ] ; then \
                echo 333 ${LOG_LEVEL} ;\
            fi \
        fi \
    fi
endif

Это выводит (в Windows cmd):

if [ 2 -gt 0 ] ; then \
        echo 111 2 ;\
        if [ 2 -gt 1 ] ; then \
                echo 222 2 ;\
                if [ 2 -gt 2 ] ; then \
                        echo 333 2 ;\
                fi \
        fi \
fi
111 2
222 2
0 голосов
/ 19 февраля 2020

make отправляет каждую строку в оболочку самостоятельно, тем самым искажая вашу команду. Чтобы продолжить линию, закройте ее обратным слэшем sh (\).

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