在这个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
为什么它首先显示命令,然后执行它? 我如何省略第一行?
答案 0 :(得分:35)
使用@字符前置命令。例如:
dirs = $(shell ls)
clean:
@$(foreach dir,$(dirs),echo $(dir);)
答案 1 :(得分:4)
来自the manual(5.2 Recipe Echoing,大胆强调我的):
通常 make 会在执行之前打印配方的每一行。我们称之为 echo ,因为它给出了您自己键入行的外观。
当一行以
@
开头时,该行的回显被抑制。在将行传递给shell之前,@
将被丢弃。 [...]
可替换地:
make 的
-s
或--silent
标记会阻止所有回显,就像所有食谱都以@
开头一样。