如何避免“没有这样的文件或目录”错误的“make clean”Makefile目标

我有一个Makefile,它定义了一个.PHONY干净的目标清理.o文件和可执行文件,目标看起来像这样:

... .PHONY : clean clean: rm $(addprefix $(vq_DIR),$(vq_OBJS)) \ $(addprefix $(vq_DIR),vq) \ $(addprefix $(covq_DIR),$(covq_OBJS)) \ $(addprefix $(covq_DIR),covq) \ $(addprefix $(covq_2_DIR),$(covq_2_OBJS)) \ $(addprefix $(covq_2_DIR),covq_2) \ $(addprefix $(covq_2_DIR),$(test_OBJS)) \ $(addprefix $(covq_2_DIR),test) 

一切工作,因为它应该,但是当这些文件中的一些不存在, rm引发错误(没有这样的文件或目录),输出说,当明确做我想要的Makefile目标失败。

有没有一种好的方法来基本告诉rm命令“如果这些文件存在,删除这些文件,不要抱怨,如果他们不”? 我抬头看了那个手册,没有find这样的标志。

编辑:我其实没有注意到在手册页中的-f标志的描述,这是解决scheme。

使用rm -f (或甚至更好的$(RM) ,由内置make规则提供,可以使用make -p找到),而不是在clean规则中使用rm

rm -f

将强制并不输出任何错误

目标失败时

当一个目标被执行时,它根据是否成功返回一个状态 – 如果一个目标失败了,那么make将不会执行任何依赖它的目标。 例如,在上面的例子中,如果“clean”失败,那么rebuild不会执行“build”目标。 不幸的是,如果没有核心文件要删除,可能会发生这种情况。 幸运的是,通过在其状态应被忽略的命令之前包括减号,可以很容易地解决这个问题:

 clean: -rm -f *.o core 

〜http ://www.cprogramming.com/tutorial/makefiles.html

我已经放弃了。 以下命令将删除文件和目录。

 find . -delete 

要只删除文件或只删除文件,可以使用-type选项:

 # remove only files find . -type f -delete # remove only dirs find . -type d -delete 

其实,我已经创建了一个小脚本(基于该片段)命名炸弹,删除文件没有抱怨: https : //github.com/lingtalfi/bomb