2017-04-18 132 views

回答

7

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

+0

很好的回答。另一方面,它将是LLVM支持v141工具集的时候。 – plasmacel

+0

是的,如果不需要v140,它们可以很好的支持v141 :-) – keith

+4

他们也可以改变LLVM-vs2014的名字! – keith

1

LLVM/Clang现在有一个更新的补丁,允许您将它与VS2017一起使用。但他们仍然不直接支持VS2017。我在LLVM开发者邮件列表上询问他们更新他们对VS2017的支持,希望他们能够做到。如果他们听我说的话。

+0

可否请您指点我的补丁? – batbrat

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标志到clang-cl。

这是一个三步过程。

  1. 安装最新的LLVM
  2. 更新toolset.props,在VS toolset.targets支持最新的铛
  3. 选择新的工具包,用于构建你的C/C++或其他郎项目

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

欢呼声,大卫

0

退房2018年1月9日http://planet.clang.org/

查看 “试试吧!”部分:

如果你已经在使用铛-CL今天的Windows上LLD-链接,你可以尝试了这一点。有两个标志需要启用它,一个用于编译器,另一个用于连接器: 要启用编译器发布.debug $ H部分,您需要将无证的-mllvm -emit-codeview-ghash-section标志传递给clang- cl(这个标志在未来应该会消失,一旦这被认为是稳定的并且足够好以便默认打开)。 要告诉lld-link要使用此信息,您需要将/DEBUG:GHASH传递给lld。

你只需要通过-mllvm -emit-codeview-ghash-section旗帜或者您的C++项目“命令行:附加选项”区域中,或者直接将其置于您在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选择你告诉发出调试信息的LLD(又名LLD-链接)会理解和运用,产生完全填充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

PPS,我也有启用微软ARM和ARM64编译器,用于构建本地Windows-10-ARM应用程序(而不是UWP现代通讯垃圾)。但是,到目前为止,我还没有通过铛做了足够的挖掘来源正确配置ARM类似于-m32-m64英特尔代码生成做一些事情。

请参阅以下文章: