根据退出状态进行make和shell重定向

时间:2012-03-05 09:35:04

标签: makefile conditional redirect

我有一个make规则,它为源列表生成依赖项文件。这是规则:

.depend: $(SRCS)
    $(CC) $(INCLUDE) -MM $^ | sed 's-^\(.*\):-$(OBJDIR)\/\1:-'> .depend

我想要的是:如果gcc对$(SRC)中的任何文件失败,则不应创建.depend。目前,如果gcc在源文件上失败,我将得到一个不完整的.depend,在我修复问题后将不会重新生成.depend。我能做什么?我想避免为每个源文件使用.depend文件

2 个答案:

答案 0 :(得分:2)

这应该有效:

.dependlist: $(SRCS)
    $(CC) $(INCLUDE) -MM $^ > $@

.depends: .dependlist
    sed 's-^\(.*\):-$(OBJDIR)\/\1:-' $< > $@

答案 1 :(得分:0)

使用.DELETE_ON_ERROR目标:

.DELETE_ON_ERROR:
.depend: $(SRCS)
    $(CC) $(INCLUDE) -MM $^ | sed 's-^\(.*\):-$(OBJDIR)\/\1:-'> .depend

来自here

  

如果在makefile中的任何位置提到.DELETE_ON_ERROR作为目标,那么make将删除规则的目标(如果它已更改并且其配方以非零退出状态退出),就像它收到时一样信号。