Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual Studio C编译器是否具有与GCC';s-M?_C_Visual Studio_Gcc_Makefile_Dependencies - Fatal编程技术网

Visual Studio C编译器是否具有与GCC';s-M?

Visual Studio C编译器是否具有与GCC';s-M?,c,visual-studio,gcc,makefile,dependencies,C,Visual Studio,Gcc,Makefile,Dependencies,我想自动生成Makefile依赖项列表,但我使用的是VisualStudio2005。如果我使用的是GCC,我可以传递-M(或许多变体中的一个)来创建这个依赖项列表 通过查看cl.exe的命令行选项,我没有看到任何明显的内容。我可以通过后期处理调整输出,但越接近越好。不是直接使用cl.exe,而是使用此包装器,您可以实现所需: 我必须解决这个问题。我们想添加一个脚本来替换-M选项。我是这样做的: 查找源预处理器(以及所需的包含路径和定义) 在您需要的文件上运行它,它应该会生成一个预处理版本 大多

我想自动生成Makefile依赖项列表,但我使用的是VisualStudio2005。如果我使用的是GCC,我可以传递-M(或许多变体中的一个)来创建这个依赖项列表


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

不是直接使用cl.exe,而是使用此包装器,您可以实现所需:


我必须解决这个问题。我们想添加一个脚本来替换-M选项。我是这样做的:

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

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

    我们在Fortran中遇到了完全相同的问题,最后不得不编写自己的迷你编译器来扫描源代码并遍历Visual Studio 2005的cl.exe中的所有
    #include

    至少,编译器在中间.idb文件中存储依赖项。您可以从那里解析它

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



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

    这是否适用于gcc的
    -M
    标志?大多数编译器标志映射都很简单,但这几乎需要预处理器(或类似的东西)来运行。VC++编译器确实有一个只进行预处理的选项,但它不会这样做。OP需要的
    -M.*
    设置是该软件包不支持的设置之一。如果已安装,请参阅
    ccFile.cfg
    的底部,或者您可以使用Visual Studio来完成此任务。一个非常好的独立预处理器是
    mcpp
    。您可以在这里找到它
    http://mcpp.sourceforge.net/
    。我还没有实现它,但这似乎是最好的解决方案。使用VisualStudio听起来像是正确的路径,它避免了需要传递单独的标志集(一个用于依赖项,另一个用于构建)。不再需要编写任何东西
    mcpp
    具备您所需的全部功能。您只需在使用GCC通常的标志(例如
    -MMD-MP
    )编译源代码后调用它即可。您需要花多少时间来完成这项工作?