我有一个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