“Clang with Microsoft CodeGen”和“LLVM-vs2014”有什么区别?

时间:2017-03-04 07:31:52

标签: c++ visual-studio debugging clang llvm

在Visual Studio 2015或更高版本中,我们可以通过两种方式使用clang:

  
      
  1. 选择Clang with Microsoft CodeGen作为Platform Toolset;

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

  4.   

我知道这两种方法都使用相同的编译器:clang 3.8。但是,我不知道它们之间有什么区别。

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

  
      
  1. 我可以像VC ++一样逐步调试由Clang with Microsoft CodeGen构建的程序;

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

  4.   

所以,我的问题是:

LLVM-vs2014不支持Visual Studio下的源代码级调试吗?

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

1 个答案:

答案 0 :(得分:8)

  

我知道这两种方法都使用相同的编译器:clang 3.8。但是,我不知道它们之间有什么区别。

差异在于 他们如何使用它。

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

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

重要的是要注意,它们都使用相同的运行时。 Clang具有clang-cl模式,可以解析Microsoft标头并使用其语言扩展。

因此,主要区别在于中后期阶段。