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

时间:2017-04-18 06:13:57

标签: visual-studio msbuild visual-studio-2017 llvm llvm-clang

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)工具集。

7 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:7)

最后,我找到了一个 brilliant GitHub repo ,其中包含将LLVM clang 5.0.0集成到Visual Studio 2017中所需的MSBuild平台工具集。按照自述文件的说明操作后,您将拥有两个新的平台工具集import matplotlib.animation as animation from matplotlib import colors import matplotlib.pyplot as plt import numpy as np N=20 steps = 100 interval_pause = 100 repeat_pause = 1000 cmap = colors.ListedColormap(['white', 'black']) bounds=[-1,0,1] norm = colors.BoundaryNorm(bounds, cmap.N) fig = plt.figure() ax = plt.gca() ax.axes.xaxis.set_ticklabels([]) ax.axes.yaxis.set_ticklabels([]) ax.axes.xaxis.set_ticks([]) ax.axes.yaxis.set_ticks([]) #plt.colorbar(img, cmap=cmap, norm=norm, boundaries=bounds, ticks=[-1,0,1]) array = 2*(np.random.rand(N,N,steps)-0.5) state = np.zeros(steps) ims = [] ##leg = ax.legend(loc='upper left',prop={'size':12}) for step in range(0,steps): state = array[:,:,step] im = plt.imshow(state,interpolation='nearest',cmap=cmap,norm=norm, animated=True) ##lab = 'step = '+str(step) ##leg.texts.set_text(lab) ims.append([im])##+leg]) ani = animation.ArtistAnimation(fig,ims,interval=interval_pause,repeat_delay=repeat_pause) #ani.save('animate_evolution '+str(timer())+'.mp4') plt.show() LLVM-vs2017。问题解决了。

<强>更新

我为LLVM 6.0.0更新了 fork ,并通过提供LLVM / clang的包含和库路径提供了更好的集成。

感谢Royi,他们意识到原始的LLVM-vs2017_xp文件是为LLVM 5.0明确定制的,并且错过了添加正确的.proplib)和{{1 }( $(LLVMInstallDir)\lib)个文件夹。

答案 2 :(得分:4)

LLVM项目现在通过https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain

显式支持Visual Studio 2017。

答案 3 :(得分:2)

我是LLVM技术的新手,并且正在使用Visual Studio扩展程序Clang Power Tools。他们有一个设置页面,您可以在其中安装LLVM(所有版本> = 4.0)。之后,您可以使用VS工具栏上的扩展按钮,随意进行clang编译或整齐的代码现代化(这是我最欣赏的)。这样,您无需进行任何配置。

更新

打开扩展设置,然后从顶部选择LLVM页面。在“ LLVM”页面上,您将看到所有受支持的LLVM版本以及每个版本右侧的“安装”按钮。安装您需要的任何版本。在页面底部的下拉列表允许您选择要安装多个版本时要使用的版本。

blog post

中逐步介绍了此功能

答案 4 :(得分:1)

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

答案 5 :(得分: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项目的新工具集
  4. 从Visual Studio 2017更新15.4.5开始,Microsoft“实验性”Clang C2不再有效。因此,上述修复是必要的,以使用clang来编译具有完整PDB(不仅仅是CodeView / Z7限制)可调试性的代码。现在,这也成为了一个更完整的可移植性测试跨平台构建套件,因为您可以使用从clang编译器前端到LLVM codegen后端和LLVM链接器的所有LLVM组件为Windows构建和PDB调试。

    干杯,大卫

答案 6 :(得分: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标记,或者将它们直接放在您的“toolset.props”文件中在C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets\LLVM-vs2017或。{ C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\LLVM-vs2017

关键是,在添加 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。,我还启用了Microsofts ARM和ARM64编译器,用于构建原生的Windows-10-ARM应用程序(不是UWP现代com-junk)。但是,到目前为止,我还没有做足够的挖掘 clang 来源来为 ARM 正确配置类似-m32-m64做的事情英特尔代码。

参见这些文章: