Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 2012 如何为vcxproj中的每个编译单元提取编译参数?_Visual Studio 2012_Msbuild_Clang_Visual Studio Sdk - Fatal编程技术网

Visual studio 2012 如何为vcxproj中的每个编译单元提取编译参数?

Visual studio 2012 如何为vcxproj中的每个编译单元提取编译参数?,visual-studio-2012,msbuild,clang,visual-studio-sdk,Visual Studio 2012,Msbuild,Clang,Visual Studio Sdk,我正在尝试获取每个编译单元的编译参数,以便为我的vcxproj创建可与clang的libTooling一起使用的“” 建议使用CompilationDatabase为项目中的所有cpp文件提供编译参数。本教程展示了CMake可以为基于CMake的项目生成compilation_commands.json 由于clang可以通过clang.exe--driver mode=cl或clang-cl.exe进入“MSVC模式”,我的想法是,如果我能在VS2012项目中获得每个cpp文件的编译参数,我就

我正在尝试获取每个编译单元的编译参数,以便为我的vcxproj创建可与clang的libTooling一起使用的“”

建议使用
CompilationDatabase
为项目中的所有cpp文件提供编译参数。本教程展示了CMake可以为基于CMake的项目生成compilation_commands.json

由于clang可以通过
clang.exe--driver mode=cl
clang-cl.exe
进入“MSVC模式”,我的想法是,如果我能在VS2012项目中获得每个cpp文件的编译参数,我就可以为vcxproj创建编译命令.json


但是,我在VS2012 SDK中查找API时遇到了问题,该SDK遍历vcxproj并检索每个编译单元的编译参数。有人能告诉我正确的API吗?

这是一项DIY工作。VS IDE项目具有每个.cpp文件的属性。通过选择一个.cpp,然后右键单击->属性->配置属性->C/C++->命令行,您可以选择编译该特定文件所需的选项。64美元的问题是如何为项目/解决方案中的每一个gile做到这一点。答案并非微不足道,但却是可行的。至少我在VS 2010上做过,而且我很确定它在VS 2012/3上也能用

秘密在于所谓的VCEngine。它是评估项目中所有属性或文件的工具。因此,真正的问题是如何评估每个文件的属性“命令行”。您需要遍历所有的.cpp文件,并为“命令行”属性调用VCProject的Evaluate方法

我认为最简单的方法是为VS IDE编写一个插件,从而获得对VCEngine实例的访问。有很多这样做的例子。请注意,VCEngine取决于版本

总之,对于包含数千个.cpp文件的项目/解决方案,您需要自动创建编译数据库


当我有时间的时候,我会把解决方案放在github上,你可能有兴趣阅读这篇文章

您可以尝试解析中间目录中的CL.command.*文件


我知道这确实很古老,但这个问题仍然相关,因此对于那些仍在寻找答案的人,我最近终于用little VS extension做到了这一点


只需安装它,就会出现一个新的“Sourcetrail”菜单,其中有一个“创建编译数据库”条目(我发现需要启用Intellisense才能单击它)。这将允许您自定义要包含的内容,并生成可与其他基于clang的工具一起使用的
compile_commands.json

在Visual Studio SDK中找不到这一点,构建是MSBuild.exe的工作。您可以修补.targets文件,但很可能很快就会丢失。非常简单的方法是提供cl.exe和link.exe的替代品。捕获命令行并将其写入文件。我很高兴你发布了这个!帮了我很多忙!谢谢