如何在vcxproj中为每个编译单元提取编译参数?

时间:2013-10-30 02:39:42

标签: visual-studio-2012 msbuild clang visual-studio-sdk

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

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

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

但是,我无法在VS2012 SDK中查找API,该SDK遍历vcxproj并检索每个编译单元的编译参数。有人能指出我正确的API吗?

4 个答案:

答案 0 :(得分:1)

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

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

我认为你能做到的最简单的方法是为VS IDE编写一个插件,从而获得对VCEngine实例的访问权限。有很多如何做到这一点的例子。请注意,VCEngine与版本有关。

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

当我有时间时,我会将解决方案放在github上

答案 1 :(得分:0)

您可能有兴趣阅读此内容 compile_commands.json for Windows/MSVC

答案 2 :(得分:0)

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

https://gist.github.com/Trass3r/f3fbe6807d28106e917368c33abf45d4

答案 3 :(得分:0)

我知道这确实很老,但是问题仍然存在,因此对于那些仍在寻找答案的人,我最近终于使用this小VS扩展名做到了这一点。

只需安装它,一个新的'Sourcetrail'菜单就会出现,并带有'Create Compilation Database'条目(我发现需要启用Intellisense才能使其可单击)。这样一来,您就可以自定义要包含的内容并生成一个compile_commands.json,可以与其他基于clang的工具等配合使用。