我喜欢使用该g++ -MM功能来自动构建我的依赖项。我这样做的方式如下:
include $(ALLOBJ:%.o=%.d)
%.d: %.cxx
@echo making dependencies for $<
@g++ -MM $(CXXFLAGS) $< -o $@
@sed -i 's,$*\.o,& $@ ,g' $@
基本上我可以给出这个规则ALLOBJ,它会:
- 将每个
.o名称转换为.d名称,然后include, - 当它找不到 a
.d时,它将从.cxx文件 中创建它- 规则的最后一行
%.d: %.cxx会将文件名添加.d到文件本身,这样依赖关系就会自动更新。
- 规则的最后一行
当我删除一个标题时,问题就出现了:.d文件仍然希望找到它,并且当它不存在时,make 会感到不安。一种解决方案是替换include为-include, 并在编译规则中构建依赖项。不幸的是,这需要每个编译规则的依赖生成行,并且还会忽略所有其他include错误(这似乎有风险)。有没有其他简单的方法来自动构建依赖项来避免这个问题?