2017-04-18 131 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英特爾代碼生成做一些事情。

請參閱以下文章: