LLVM在Visual Studio 4.0铛2017年
的official LLVM 4.0 build for Windows与Visual Studio集成了多达到Visual Studio 2015年。不幸的是仍然不支持的Visual Studio 2017LLVM在Visual Studio 4.0铛2017年
当您尝试设置项目的平台工具集到LLVM-vs2014
,它弹出一个错误。
你知道任何方式使它工作吗?
它需要一些仅与C++ v140工具集一起提供的msbuild目标,而VS 2017仅默认安装v141工具集。如果你打开VS 2017安装程序,找到v140工具集的复选框并安装,那么正确的C++ msbuild目标将可用,并且这个东西将工作。
LLVM/Clang现在有一个更新的补丁,允许您将它与VS2017一起使用。但他们仍然不直接支持VS2017。我在LLVM开发者邮件列表上询问他们更新他们对VS2017的支持,希望他们能够做到。如果他们听我说的话。
可否请您指点我的补丁? – batbrat
我已经想出了如何将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。
这是一个三步过程。
- 安装最新的LLVM
- 更新toolset.props,在VS toolset.targets支持最新的铛
- 选择新的工具包,用于构建你的C/C++或其他郎项目
从Visual Studio 2017更新15.4.5开始,微软的“实验性”Clang C2不再适用。因此,使用clang编译具有完整PDB(不仅限于CodeView/Z7限制)可调试性的代码时,上述修复是必需的。由于您可以使用从clang编译器前端到LLVM代码生成器后端和LLVM链接器的所有LLVM组件进行构建和PDB调试,因此这也成为用于跨平台构建的可移植性测试的更完整套件。
欢呼声,大卫
退房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-vs2017
或 C:\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
为英特尔代码生成做一些事情。
请参阅以下文章:
很好的回答。另一方面,它将是LLVM支持v141工具集的时候。 – plasmacel
是的,如果不需要v140,它们可以很好的支持v141 :-) – keith
他们也可以改变LLVM-vs2014的名字! – keith