我喜欢使用该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
错误(这似乎有风险)。有没有其他简单的方法来自动构建依赖项来避免这个问题?