'@'不起作用,如何在makefile中停止if..fi之间的回声?

时间:2013-06-19 12:40:04

标签: makefile sh

我在makefile中有以下命令:

$(OUT)/classes.jar: $(JavaFileList) $(libJars) $(ANDROID_JAR) | $(OutClasses)
    @echo javac: `wc -l < $(JavaFileList)` source files

    if [ $$ENABLE_MV = 'YES' ]; then \
        echo Backup $(OutClasses) to $(OutClasses).bak; \
    fi

但每次都会打印以下命令:

if [ $$ENABLE_MV = 'YES' ]; then \
    echo Backup $(OutClasses) to $(OutClasses).bak; \
fi

如何制止这个? “@”dos在if..fi中不起作用,会发生以下错误:/ bin / sh:第1行:@echo:命令未找到

1 个答案:

答案 0 :(得分:4)

每条逻辑行必须以要被抑制的@开头。逻辑行是物理线加上所有后续行,在行尾使用反斜杠组合。因此,在您的情况下,您需要@之前的if,因为前一行(echo)不以反斜杠结尾,因此这是一条新的逻辑行。您不需要后续行中的@,因为它们是相同的逻辑行(使用反斜杠连接)。

$(OUT)/classes.jar: $(JavaFileList) $(libJars) $(ANDROID_JAR) | $(OutClasses)
        @echo javac: `wc -l < $(JavaFileList)` source files

        @if [ $$ENABLE_MV = 'YES' ]; then \
            echo Backup $(OutClasses) to $(OutClasses).bak; \
        fi