c – 如何为使用makefile构建的整个项目生成一个大的依赖关系图?

我有一个使用makefile构建的巨大项目.没有文件更改时(即只是遍历项目并检查更新的文件),在项目的根目录下运行make需要20多分钟.

我想创建一个依赖关系图,它将根据更改的文件告诉我需要运行’make’的目录.我已经有了一个可以从我的版本控制系统获得的更新文件列表,我想跳过20分钟的遍历并直接进入需要重新编译的位置.

该项目混合使用多种语言和自定义工具,因此理想情况下这与语言无关(即它只处理所有makefile以生成依赖项).我也会满足于C/C++特定的解决方案,因为大部分项目都在C中.该项目建立在Linux上.

[编辑 – 澄清,对评论的回应]

该项目真的是巨大的,它只需要20分钟因为大小和因为下面链接中描述的所有内容(“递归使得考虑有害”).不幸的是,这个项目是由来自许多不同地方的许多作品组合在一起的,并且我可以用低级Makefiles做的事情几乎没有灵活性……将这些部分组合在一起的顶级部分是我可以控制的部分.

最佳答案 你可以寻找的一件事是“makefile graph” – 有一些项目可以从大型makefile项目中创建依赖树.这是一个:
http://sailhome.cs.queensu.ca/~bram/makao/index.html.我认为它将创建一个漂亮的图形,并实际构建东西.

如果你想要自己的Makefile解析器,并用你自己的自定义脚本替换make,我的建议是“不要”.但是有一系列Perl模块:Makefile::Parser.它声称“通过51%的GNU Make测试套件”.

如果你想看看花了这么长时间,你可以打开Make的调试输出.它的位通常有点无用,比如Make的页面和页面决定是否应用隐式规则,但也许会发生一些不需要发生的明显事情.如果你想这样做,你可以看一下remake,“GNU Make with comprehensible tracing and a debugger”.

点赞