为什么脚本和注释在执行期间出现?

时间:2014-04-17 00:13:34

标签: makefile

在我的makefile中,我有一个名为indent-fast -

的目标
indent-fast:
    # astyle --style=allman --indent=tab `find . -name "*.java"`
    files=`find . -name "*.java"` ; \
    for file in $$files ; do \
        echo formatting $$file ; \
    done ;\
    # to do a whitesmith at 4 spaces, uncomment this line --
    # astyle --style=whitesmith --indent=spaces=4 `find . -name "*.java"`

但是当我执行它时,我得到了这个输出 -

ramgorur@ramgorur-pc:~$ make indent-fast

# astyle --style=allman --indent=tab `find . -name "*.java"`
files=`find . -name "*.java"` ; \
    for file in $files ; do \
        echo formatting $file ; \
    done ;\
formatting ./File1.java
formatting ./File2.java
formatting ./File3.java
.
.
.
formatting ./FileN.java
# to do a whitesmith at 4 spaces, uncomment this line --
# astyle --style=whitesmith --indent=spaces=4 `find . -name "*.java"`

为什么它会显示脚本以及std输出上的注释?另请注意,indent-fast是文件中的最后一个目标。

1 个答案:

答案 0 :(得分:2)

因为您的评论在食谱中缩进,所以它们不是make条评论,而是作为食谱的一部分执行。在这种情况下,它们是shell评论。如果这是您的目标,您可以添加@以防止输出它们。

来自GNU make manual

  

配方中的注释将传递给shell,就像使用任何其他配方文本一样。 shell决定如何解释它:这是否是注释取决于shell。

简单示例makefile:

# make comment
target:
    # shell comment
    :
    @# output-suppressed shell comment
    @:

执行:

$ make
# shell comment
:

编辑:由于一个例子不够好,这里是您确切问题的解决方案:

indent-fast:
    @# astyle --style=allman --indent=tab `find . -name "*.java"`
    @files=`find . -name "*.java"` ; \
    for file in $$files ; do \
        echo formatting $$file ; \
    done
    @# to do a whitesmith at 4 spaces, uncomment this line --
    @# astyle --style=whitesmith --indent=spaces=4 `find . -name "*.java"`