让我们测试一下。启动您选择的终端,导航到您选择的目录,然后创建一个新目录(用于保存测试文件)。我选择了so-27204300:
$ mkdir so-27204300
$ cd so-27204300
现在创建一个不带 .PHONY 注释的简单 Makefile。我只会显示内容:
clean:
echo "Clean is executing"
执行make命令,应该会得到如下输出:
$ make
echo "Clean is executing"
Clean is executing
现在,创建一个clean 文件(touch clean)并再次执行make。你会得到
$ make
make: `clean' is up to date.
因为有一个文件clean 比目标clean 的输出更新。将.PHONY clean 添加到Makefile 以便它会读取
.PHONY: clean
clean:
echo "Clean is executing"
现在,即使您的目录中有文件clean,make 也会执行目标
$ make
echo "Clean is executing"
Clean is executing
关于您的 PS:更改此 Makefile 使其显示为:
.PHONY: clean
clean:
rm test
echo "Done"
如您所见,那里没有-,但当前目录中也没有test 文件。运行make 会给你
$ make
rm test
rm: cannot remove ‘test’: No such file or directory
make: *** [clean] Error 1
echo 没有输出。如果clean 目标是另一个目标的先决条件,那么由于这个错误,另一个目标也不会被构建。
添加- 以便Makefile 显示为:
.PHONY: clean
clean:
-rm test
echo "Done"
解决了这个问题:
$ make
rm test
rm: cannot remove ‘test’: No such file or directory
make: [clean] Error 1 (ignored)
echo "Done"
Done
对于rm,您还可以使用-f 让它停止抱怨错误。但是还有其他命令没有错误参数的消音器。
如果你想隐藏正在执行的命令的打印,你可以使用@而不是-。