【发布时间】:2010-12-19 13:55:18
【问题描述】:
我想自动生成一个 Makefile 依赖列表,但我使用的是 Visual Studio 2005。如果我使用的是 GCC,我可以通过 -M(或许多变体之一)来创建这个依赖列表。
查看cl.exe 的命令行选项,我没有看到任何明显的东西。我可以通过后处理来调整输出,但越接近越好。
【问题讨论】:
标签: c visual-studio gcc makefile dependencies
我想自动生成一个 Makefile 依赖列表,但我使用的是 Visual Studio 2005。如果我使用的是 GCC,我可以通过 -M(或许多变体之一)来创建这个依赖列表。
查看cl.exe 的命令行选项,我没有看到任何明显的东西。我可以通过后处理来调整输出,但越接近越好。
【问题讨论】:
标签: c visual-studio gcc makefile dependencies
编译器将依赖项存储在中间 .idb 文件中。你也许可以从那里解析它。
见https://msdn.microsoft.com/en-us/library/kfz8ad09.aspx
您似乎可以在其中找到所有以“/mr/inversedeps/”或“/ipm/header/”为前缀的包含文件。
我认为您还应该在其他中间文件中找到依赖项,例如“CL.read.1.tlog”。
【讨论】:
至少在Visual Studio 2005的cl.exe中,有/showIncludes的选项。
【讨论】:
我们在使用 Fortran 时遇到了完全相同的问题,最终不得不编写自己的迷你编译器来扫描源代码并遍历所有 #includes。
【讨论】:
我必须处理那个确切的问题。我们想添加一个替换 -M 选项的脚本。我是这样做的:
我就是这样做的,而且效果很好。祝你好运!
【讨论】:
mcpp。你可以在这里找到它http://mcpp.sourceforge.net/。
mcpp 拥有您所需要的一切。在使用 GCC 也会采用的常用标志编译源代码后,您可以简单地调用它,例如 -MMD -MP。
不直接使用 cl.exe,但使用此包装器可以实现您想要的:
【讨论】:
-M 标志?大多数编译器标志映射都是微不足道的,但这几乎需要预处理器(或类似的东西)才能运行。
-M.* 设置属于该软件包不支持的设置。如果您已安装,请参阅ccFile.cfg 的底部,或pastebin.com/m1707aa02