将LLVM Clang 4.x.x / 5.x.x / 6.x.x集成到Visual Studio 2017中

问题描述 投票:7回答:6

official LLVM 4.0 build for Windows与Visual Studio集成到Visual Studio 2015.不幸的是它仍然不支持Visual Studio 2017。

当您尝试将项目的平台工具集设置为LLVM-vs2014时,会弹出错误。

你知道有什么方法让它起作用吗?


更新

在2018年,LLVM 6.0官方仍然不支持与Visual Studio 2017(版本15.X.X)的集成,仅支持Visual Studio 2015(版本14.X.X)工具集。

visual-studio msbuild visual-studio-2017 llvm llvm-clang
6个回答
10
投票

它需要一些仅与C ++ v140工具集一起提供的msbuild目标,而VS 2017默认只安装v141工具集。如果您打开VS 2017安装程序,找到v140工具集的复选框并安装,那么正确的C ++ msbuild目标将可用,并且该东西将起作用。


7
投票

最后,我找到了一个brilliant GitHub repo,其中包含所需的MSBuild平台工具集,它将LLVM clang 5.0.0集成到Visual Studio 2017中。按照README文件的说明,您将拥有两个新的平台工具集LLVM-vs2017LLVM-vs2017_xp。问题解决了。

更新

我制作了一个fork,它针对LLVM 6.0.0进行了更新,并通过提供LLVM / clang的包含和库路径提供了更好的集成。

感谢Royi,他意识到原始的.prop文件是为LLVM 5.0明确定制的,它错过了添加正确的lib $(LLVMInstallDir)\lib)和include$(LLVMInstallDir)\lib\clang\6.0.0\include)文件夹。


4
投票

LLVM项目现在通过https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain明确支持Visual Studio 2017


1
投票

LLVM / Clang现在有一个更新的补丁,允许您将其与VS2017一起使用。但他们仍然没有直接支持VS2017。我在LLVM开发者邮件列表上询问他们是否更新了他们对VS2017的支持,所以希望他们会这样做。如果他们听我说的话。


1
投票

我已经想出如何将LLVM Clang 7.0与Visual Studio 2017更新15.5.6集成。 v1913完全支持使用最新LLVM构建的基于PDB的调试。

即lld-link / DEBUG:GHASH; clang-cl -mllvm -emit-codeview-ghash-section flag to clang-cl。

这是一个三步过程。

  1. 安装最新的llvm
  2. 更新VS中的toolset.props,toolset.targets以支持最新的clang
  3. 选择用于构建C / C ++或其他lang项目的新工具集

从Visual Studio 2017更新15.4.5开始,微软“实验性”Clang C2不再有效。因此,上述修复是必要的,以使用clang来编译具有完整PDB(不仅仅是CodeView / Z7限制)可调试性的代码。现在,这也成为了一个更完整的可移植性测试跨平台构建套件,因为您可以使用从clang编译器前端到LLVM codegen后端和LLVM链接器的所有LLVM组件为Windows构建和PDB调试。

干杯,大卫


0
投票

查看2018年1月9日http://planet.clang.org/

看看“试一试!”部分:

如果你今天已经在Windows上使用clang-cl和lld-link,你可以尝试一下。启用此功能需要两个标志,一个用于编译器,另一个用于链接器:要启用编译器发出.debug $ H部分,您需要将未记录的-mllvm -emit-codeview-ghash-section标志传递给clang-cl(此标志)一旦这被认为是稳定的并且足以在默认情况下打开,那么将来应该消失。要告诉lld-link使用此信息,您需要将/DEBUG:GHASH传递给lld。

您只需要在c ++项目“命令行:附加选项”区域中传递-mllvm -emit-codeview-ghash-section标志,或者将它们直接放在您在C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets\LLVM-vs2017C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\LLVM-vs2017中创建的“toolset.props”文件中。

关键是在添加那些cli选项时,你告诉clang发出调试信息,lld(也就是lld-link)将理解并用于生成完全填充的PDB文件。它不是2018年1月9日LLVM 7.0下降之前的限制。

toolset.targets :(任何版本)

<Project ToolsVersion="14.1" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" />
</Project>

toolset.props:(Win32版本)

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Microsoft.Cpp.$(Platform).v141.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Microsoft.Cpp.$(Platform).v141.props')"/>
  <Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Toolset.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Toolset.props')"/>

  <PropertyGroup>
    <LLVMInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\LLVM)</LLVMInstallDir>
    <LLVMInstallDir Condition="'$(LLVMInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\LLVM)</LLVMInstallDir>
    <ExecutablePath>$(LLVMInstallDir)\msbuild-bin;$(ExecutablePath)</ExecutablePath>
    <LibraryPath>$(LLVMInstallDir)\lib\clang\7.0\lib\windows;$(LibraryPath)</LibraryPath>
  </PropertyGroup>

  <ItemDefinitionGroup>
    <ClCompile>
      <!-- remove the implicit vcxxx.pdb path to avoid rebuilds every time as clang-cl only supports /Z7 -->
      <ProgramDataBaseFileName></ProgramDataBaseFileName>
      <!-- Set the value of _MSC_VER to claim for compatibility -->
      <AdditionalOptions>-m32 -fmsc-version=1913 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
  </ItemDefinitionGroup>
</Project>

对于x64,将-m32更改为-m64

p.p.s.,我还启用了微软ARM和ARM64编译器,用于构建原生Windows-10-ARM应用程序(不是UWP现代com-junk)。但是,到目前为止,我还没有完成对clang源的深入挖掘,无法正确配置ARM类似于-m32-m64为英特尔代码生成的东西。

看这些文章:

© www.soinside.com 2019 - 2024. All rights reserved.