显示并执行

时间:2011-06-27 20:42:42

标签: foreach makefile

在这个makefile中

dirs = $(shell ls)
clean:
    $(foreach dir,$(dirs),echo $(dir);)

输出

$ make clean
echo bin; echo install.sh; echo Makefile; echo README.md; echo utils;
bin
install.sh
Makefile
README.md
utils

为什么它首先显示命令,然后执行它? 我如何省略第一行?

2 个答案:

答案 0 :(得分:35)

使用@字符前置命令。例如:

dirs = $(shell ls)
clean:
    @$(foreach dir,$(dirs),echo $(dir);)

答案 1 :(得分:4)

来自the manual5.2 Recipe Echoing,大胆强调我的):

  

通常 make 会在执行之前打印配方的每一行。我们称之为 echo ,因为它给出了您自己键入行的外观。

     

当一行以@开头时,该行的回显被抑制。在将行传递给shell之前,@将被丢弃。 [...]

可替换地:

  

make -s--silent标记会阻止所有回显,就像所有食谱都以@开头一样。