2017-03-04 43 views
4

下的Visual Studio 2015年或以后,我们可以通过两种方式使用铛:“Clang与Microsoft CodeGen”和“LLVM-vs2014”有什么区别?

  1. 选择Clang with Microsoft CodeGenPlatform Toolset;

  2. 安装LLVM-3.8-win64.exe,并选择LLVM-vs2014作为Platform Toolset;

我知道两者的两种方式使用相同的编译器:clang 3.8。但是,我不知道他们之间有什么不同。

我的经验显示Clang with Microsoft CodeGenLLVM-vs2014更具调试性。换句话说:

  1. 我可以调试通过Clang with Microsoft CodeGen步步作为VC++确实建立了一个程序;

  2. 由“LLVM-vs2014”构建的程序无法在源代码级逐步调试,但程序可以按预期方式直接运行。

所以,我的问题是:

是否LLVM-vs2014不支持的Visual Studio在源代码级调试?

Clang with Microsoft CodeGenClang with Microsoft CodeGen仅由Microsoft提供的,用于支持Visual Studio下的源代码级调试吗?

+2

Clang只提供编译器的前端。更好的错误报告是它声名鹊起的主张。其他人提供后端,代码生成器和优化器。如果您使用VS提供的工具集,那就是微软的。但是如果你使用其他的,你可以自己带LLVM。他们对鼓不感兴趣,异常处理传统上是关键。当然,调试是一个问题,你不能依赖VS提供的调试器引擎。在我看来,你需要lldb,也是LLVM包的一部分。铿锵看起来像一个前端调整接受MSFT的怪癖。 –

回答

5

我知道两种方式都使用相同的编译器:叮当3.8。但是,我不知道他们之间有什么不同。

所不同的是他们如何使用

Clang with Microsoft CodeGen正在使用Clang将解析为的源代码转换为AST。但随后MSVC的代码生成器开始使用,因此不使用与LLVM相关的任何内容。

LLVM-vs2014在每个编译阶段都充分使用了Clang。它使用LLVM生成代码。因此,难怪调试信息与Visual Studio预期的不兼容。

重要的是要注意,它们都使用相同的运行时。铿锵有clang-cl模式,使其能够解析Microsoft标题并使用其语言扩展。

所以,主要区别在于中后期阶段。