3

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

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

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

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

4

4 回答 4

2

我知道这真的很老了,但是这个问题仍然很重要,所以对于那些仍在寻找答案的人,我最近终于使用这个小小的 VS 扩展来做到这一点。

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

于 2019-05-21T16:40:16.803 回答
1

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

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

我认为您可以做到的最简单的方法是为 VS IDE 编写一个插件,从而获得对 VCEngine 实例的访问权限。有很多例子可以说明如何做到这一点。请注意,VCEngine 取决于版本。

无论如何,对于具有数千个 .cpp 文件的项目/解决方案,您需要自动创建编译数据库。

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

于 2015-01-19T16:41:50.547 回答
0

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

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

于 2016-12-12T16:11:43.133 回答
0

您可能有兴趣阅读此 适用于 Windows/MSVC 的 compile_commands.json

于 2015-10-28T06:02:00.547 回答