web-dev-qa-db-ja.com

LLVM Clang 4.x.x / 5.x.x / 6.x.xをVisual Studio 2017に統合する

Windows用の公式LLVM 4.0ビルド は、Visual Studio 2015までのVisual Studioと統合します。残念ながら、Visual Studio 2017はまだサポートされていません。

プロジェクトのPlatform ToolsetLLVM-vs2014に設定しようとすると、エラーがポップアップ表示されます。

それを機能させる方法を知っていますか?


更新

2018年、LLVM 6.0はVisual Studio 2017(バージョン15.X.X)との統合を正式にサポートしていません。VisualStudio 2015(バージョン14.X.X)ツールセットとの統合のみをサポートしています。

8
plasmacel

最後に、素晴らしいGitHubリポジトリを見つけ、必要なMSBuildプラットフォームツールセットとを統合しましたLLVM clang 5.0.0をVisual Studio 2017に。 READMEファイルの指示に従うと、2つの新しいプラットフォームツールセット_LLVM-vs2017_と_LLVM-vs2017_xp_ができます。問題は解決しました。

更新

forkを作成しました。これはLLVM 6.0.0用に更新され、LLVM /のインクルードパスとライブラリパスを提供することで、より良い統合を提供しますクラン。

Royi のおかげで、元の_.prop_ファイルはLLVM 5.0用に明示的に調整されているため、追加に失敗しました適切なlib$(LLVMInstallDir)\lib)およびinclude$(LLVMInstallDir)\lib\clang\6.0.0\include)フォルダー。

8
plasmacel

C++ v140ツールセットでのみ出荷されるいくつかのmsbuildターゲットが必要であり、VS 2017はデフォルトでv141ツールセットのみをインストールします。 VS 2017インストーラーを開いて、v140ツールセットのチェックボックスを見つけてインストールすると、適切なC++ msbuildターゲットが利用可能になり、動作します。

10
keith

LLVMプロジェクトは https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain を介してVisual Studio 2017を明示的にサポートするようになりました

4
thakis

LLVM Clang 7.0をVisual Studio 2017 update 15.5.6と統合する方法を理解しました。最新のLLVMビルドを使用したPDBベースのデバッグを完全にサポートするv1913。

つまり、lld-link/DEBUG:GHASH; clang-clへのclang-cl -mllvm -emit-codeview-ghash-sectionフラグ。

これは3つのステップのプロセスです。

  1. 最新のllvmをインストールする
  2. VSのtoolset.props、toolset.targetsを更新して、最新のclangをサポートする
  3. C/C++またはその他のlangプロジェクトの構築に使用する新しいツールセットを選択します

Visual Studio 2017アップデート15.4.5以降、Microsoftの「実験的」Clang C2は機能しなくなりました。したがって、clangを使用して、完全なPDB(CodeView/Z7だけでなく)デバッグ機能を備えたコードをコンパイルするには、上記の修正が必要です。これはまた、clangコンパイラのフロントエンドからLLVM codegenバックエンドおよびLLVMリンカーまでのすべてのLLVMコンポーネントを使用してウィンドウのビルドとPDBデバッグを行えるため、クロスプラットフォームビルドの移植性テストのより完全なスイートになります。

乾杯、デビッド

1
smallscript

LLVM/Clangには、VS2017で使用できるように更新されたパッチがあります。ただし、VS2017はまだ直接サポートされていません。私は、LLVM開発者のメーリングリストで、VS2017のサポートを更新するように依頼しました。彼らが私が言ったことを聞くなら。

1
Osman Zakir

2018年1月9日をチェックしてください http://planet.clang.org/

「試してみよう!」を見てください。セクション:

すでにclang-cllld-linkを使用している場合今日のWindowsでは、これを試すことができます。これを有効にするために必要な2つのフラグがあります。1つはコンパイラ用で、もう1つはリンカー用です。。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オプションを追加するときにclanglld(akalld-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に変更します

pps、私はネイティブのWindows-10-ARMアプリ(UWP modern-com-junkではない)を構築するためにMicrosofts ARMおよびARM64コンパイラも有効にしています。しかし、まだ十分な掘り出しを行っていません。 clangソースを介して[〜#〜] arm [〜#〜]-m32および-m64Intelcode-genに対して行うこと.

次の記事を参照してください。

0
smallscript