【发布时间】:2012-10-12 21:09:15
【问题描述】:
我喜欢使用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它, - 当它找不到
.d时,它将从.cxx文件中创建它-
%.d: %.cxx规则的最后一行会将.d文件的名称添加到文件本身,这样依赖关系就会自动更新。
-
当我删除一个标题时,问题就出现了:.d 文件仍然希望找到它,并且当它不存在时,make 会感到不安。一种解决方案是将include 替换为-include,并在编译规则中构建依赖关系。不幸的是,这需要每个编译规则的依赖生成行,并且还将忽略所有其他 include 错误(这似乎有风险)。有没有其他简单的方法来自动构建依赖项来避免这个问题?
【问题讨论】: