如果在makefile中如何写嵌套的?

问题描述 投票:1回答:2

如何在Makefile中使用多个嵌套的if-then块?

例如

$(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

我做错了什么?

shell makefile
2个回答
0
投票

make单独将每一行发送到外壳,因此会破坏您的命令。要继续一行,请以反斜杠(\)结束。


0
投票

根据beta和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
© www.soinside.com 2019 - 2024. All rights reserved.