【问题标题】:Does the Visual Studio C compiler have an equivalent to GCC's -M?Visual Studio C 编译器是否具有与 GCC 的 -M 等效的功能?
【发布时间】:2010-12-19 13:55:18
【问题描述】:

我想自动生成一个 Makefile 依赖列表,但我使用的是 Visual Studio 2005。如果我使用的是 GCC,我可以通过 -M(或许多变体之一)来创建这个依赖列表。

查看cl.exe 的命令行选项,我没有看到任何明显的东西。我可以通过后处理来调整输出,但越接近越好。

【问题讨论】:

    标签: c visual-studio gcc makefile dependencies


    【解决方案1】:

    编译器将依赖项存储在中间 .idb 文件中。你也许可以从那里解析它。

    https://msdn.microsoft.com/en-us/library/kfz8ad09.aspx

    您似乎可以在其中找到所有以“/mr/inversedeps/”或“/ipm/header/”为前缀的包含文件。


    我认为您还应该在其他中间文件中找到依赖项,例如“CL.read.1.tlog”。

    【讨论】:

      【解决方案2】:

      至少在Visual Studio 2005的cl.exe中,有/showIncludes的选项。

      【讨论】:

        【解决方案3】:

        我们在使用 Fortran 时遇到了完全相同的问题,最终不得不编写自己的迷你编译器来扫描源代码并遍历所有 #includes

        【讨论】:

        • 你做了多少时间?
        【解决方案4】:

        我必须处理那个确切的问题。我们想添加一个替换 -M 选项的脚本。我是这样做的:

        1. 查找源预处理器(以及您需要的包含路径和定义)
        2. 在您需要的文件上运行它,它应该会生成一个预处理版本。
        3. 大多数预处理器都有一个启用额外信息的开关(例如某些代码 sn-p 来自的文件)
        4. 编写一个简单的脚本来提取所有标题名称
        5. 从中创建一个集合,以便过滤掉重复项。

        我就是这样做的,而且效果很好。祝你好运!

        【讨论】:

        • 您可以使用 Visual Studio 来完成此任务。一个相当不错的独立预处理器是mcpp。你可以在这里找到它http://mcpp.sourceforge.net/
        • 我还没有实现它,但这似乎是最好的解决方案。使用 Visual Studio 听起来像是正确的路径,它避免了必须传递单独的标志集(一个用于依赖项,另一个用于构建)。
        • 不再需要写任何东西了。 mcpp 拥有您所需要的一切。在使用 GCC 也会采用的常用标志编译源代码后,您可以简单地调用它,例如 -MMD -MP
        【解决方案5】:

        不直接使用 cl.exe,但使用此包装器可以实现您想要的:

        http://msdn.microsoft.com/en-us/library/y209k0z6.aspx

        【讨论】:

        • 这是否适用于 gcc 的 -M 标志?大多数编译器标志映射都是微不足道的,但这几乎需要预处理器(或类似的东西)才能运行。
        • VC++ 编译器确实有一个仅预处理选项,但它不会这样做。 OP 想要的 -M.* 设置属于该软件包不支持的设置。如果您已安装,请参阅ccFile.cfg 的底部,或pastebin.com/m1707aa02
        猜你喜欢
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多