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

jam*_*meh 12 linux makefile rm

我有一个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)
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,但是当其中一些文件不存在时,rm会引发错误(没有这样的文件或目录),并且输出显示Makefile目标失败,当它明显做我想要的时候.

是否有一种很好的方法可以基本告诉rm命令"如果它们存在则删除这些文件,如果不存在则不要抱怨"?我查阅了联机帮助页rm,但没有找到这样的标志.

编辑:我实际上没有注意到-f联机帮助页中的标志描述,这是解决方案.

Bas*_*tch 22

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

  • 更好的是:使用`$(RM)`,它是由GNU Makefile 自动定义的。 (3认同)

use*_*333 5

rm -f

将FORCE并且不输出任何错误