如何从 CMake 或 make 输出编译依赖项?

Posted

技术标签:

【中文标题】如何从 CMake 或 make 输出编译依赖项?【英文标题】:How to output compilation dependencies from CMake or make? 【发布时间】:2011-03-13 05:37:08 【问题描述】:

我有一个 CMake C++ 项目,该项目正在快速增长并且经常发生变化。我正在尝试将编译时间减少到最低限度。

通常,当我重建项目时,尤其是在头文件更改后,我会惊讶于需要重新编译多少编译单元。我正在尝试识别可以避免的#includes,例如通过使用预先声明或不在标头中内联琐碎的函数。

有什么方法可以从 CMake 本身、从生成的 Makefile 或直接从文件本身找出哪些单元取决于哪些标头?

列表会更好,可视化图表(graphviz?)甚至更好。谷歌对我来说一无所获。 CMake 有 --graphviz 选项,但它在目标上运行,而不是在单个编译单元上运行。

首选跨平台(即仅使用 CMake),但我也会满足于仅 Linux。

【问题讨论】:

【参考方案1】:

当我使用基于 gcc 的工具链时,我发现 cmake2.8(运行 make 后)生成的依赖信息位于 depend.makedepend.internal 文件中。使用 VS 似乎不会生成此类文件(但这对您来说似乎不是问题)。此外,这些文件是 cmake 内部文件,因此使用它们需要您自担风险

【讨论】:

这只是传递闭包(即包括间接依赖),但它很有帮助,谢谢!

以上是关于如何从 CMake 或 make 输出编译依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 cmake 静态库的编译依赖项?

cmake 如何编译成debug版?

make如何指定cmake路径

CMake 的 FetchContent 与 Makefile 构建的依赖项

如何使用 CMake 配置 DBus 依赖项

在现代CMake项目中存档静态依赖项