如何检测make依赖项列表中的标头更改

时间:2010-08-12 21:32:13

标签: c++ makefile

经过近十年的C#和VC ++编码,我回到了linux-g ++-make-emacs环境。

试图刷新我写的一个make文件的记忆我没有太多问题,但我偶然发现了以下问题,我承认我不记得我过去如何解决它:

假设一个特定的.cpp文件与其他几个头文件有一些依赖关系(将其相应的头文件放在一边易于处理)...检测某些.h被更改的最佳方法是什么?

我当然不喜欢将它们放在我的目标 - 依赖列表中的想法,因为这是一个手动且容易出错的过程!

当答案发生变化时,简单的答案当然是建立清洁,但我无法回想起标准方式是什么......

在VC ++中我没有必要处理这个问题,因为IDE非常擅长处理依赖...

3 个答案:

答案 0 :(得分:6)

看看automated dependencies。带有-M -MD -MT等标志的gcc将解析您的文件并计算依赖关系。将它们传递给sed。谷歌会发现很多例子。

答案 1 :(得分:2)

deinst和idimba让你走在正确的轨道上。要了解您可能遇到的潜在陷阱以及如何避免这些陷阱,请查看本文。

http://mad-scientist.net/make/autodep.html

答案 2 :(得分:1)

正如@deinst所提到的,gcc能够输出你的cpp直接和间接使用的所有头文件。你需要的是大致如下:

obj-file: src-file

# dep file should be recreated each time header file or header file it depends on is changed
dep-file: src-file 
    gcc -M ...... > dep-file
    modify dep-file to make dep-file depend and all header files too

include dep-file

在我参与的项目中实施了一次,但是这个想法的全面实施是漫长而棘手的。

如果您有可能考虑使用支持自动维护的更高级工具,例如cmakescons。我个人使用cmake - 每个程序员都可以编写一个cmake文件,并且自动执行是免费的。