MSBuild プロジェクトの vcpkg

統合方法

ユーザー全体の統合

MSBuild プロジェクトで vcpkg を使用するには、次のコマンドを実行します。

vcpkg integrate install

MSBuild 統合を vcpkg integrate install 初めて有効にする場合にのみ、コマンドを実行する必要があります。 これにより、既存および将来のすべてのプロジェクトに対して MSBuild 統合が可能になります。

vcpkg のインスタンスが複数ある場合は、このコマンドを vcpkg integrate install 使用して、MSBuild 内で使用されている vcpkg インスタンスを更新できます。 MSBuild ユーザー全体の統合を削除するために使用 vcpkg integrate remove します。

この統合メソッドは、vcpkg がインストールされたパッケージを次のプロジェクト プロパティに自動的に追加します:インクルード ディレクトリ、リンク ディレクトリ、およびリンク ライブラリ。 さらに、ビルド後のアクションが作成され、必要な DLL がビルド出力フォルダーに確実にコピーされます。 これは、Visual Studio 2015 以降を使用するすべてのソリューションとプロジェクトで機能します。

これは、ライブラリの大部分に必要なすべてです。 ただし、一部のライブラリでは、再定義など、競合する動作が main()実行されます。 これらの競合するオプションのうちどれを必要とするかをプロジェクトごとに選択する必要があるため、これらのライブラリをリンカー入力に手動で追加する必要があります。

手動リンクが必要な例を次に示します (完全なリストではありません)。

  • Gtest では、 gtestgmock、〟 gtest_maingmock_main
  • SDL2 では、次の機能が提供されます。 SDL2main
  • SFML では、次の機能が提供されます。 sfml-main
  • Boost.Test の提供 boost_test_exec_monitor

インストールされているすべてのパッケージの完全な一覧を取得するには、次を実行 vcpkg owns manual-linkします。

インポート .props.targets

vcpkg は、各.vcxprojプロジェクトにファイルとscripts/buildsystems/vcpkg.targetsファイルをscripts/buildsystems/vcpkg.props明示的にインポートすることで、MSBuild プロジェクトに統合することもできます。 相対パスを使用すると、vcpkg をサブモジュールで使用し、ユーザーが実行時 git cloneに自動的に取得できるようになります。

ソリューション内のすべてのプロジェクトにこれらを追加する最も簡単な方法は、リポジトリのルートにファイルを作成Directory.Build.propsDirectory.Build.targetsすることです。

次の例では、それらがリポジトリのルートに存在し、サブモジュールmicrosoft/vcpkgが .vcpkg

Directory.Build.props

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>

Directory.Build.targets

<Project>
 <Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>

の詳細については、公式の MSBuild ドキュメントの「ビルドのカスタマイズ」セクションをDirectory.Build.propsDirectory.Build.targets参照してください。

リンクされた NuGet パッケージ

Note

この方法は、他のユーザーとの共有が困難になるため、新しいプロジェクトには推奨されません。 移植可能な自己完結型 NuGet パッケージについては、次を export command参照してください。

VS プロジェクトは、NuGet パッケージを介して統合することもできます。 これによりプロジェクト ファイルが変更されるため、オープンソース プロジェクトにはこの方法をお勧めしません。

PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg

With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
    Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"

Note

生成された NuGet パッケージには、実際のライブラリが含まれていません。 代わりに、vcpkg インストールへのショートカット (またはシンボリック リンク) のように機能し、ライブラリに対する変更 (インストール/削除) で "自動的に" 更新されます。 NuGet パッケージを再生成または更新する必要はありません。

一般的な構成

VcpkgEnabled (Vcpkg を使用)

これを "false" に設定すると、プロジェクトの vcpkg 統合を明示的に無効にすることができます。

VcpkgConfiguration (Vcpkg 構成)

構成名が複雑すぎて vcpkg が正しく推測できない場合は、このプロパティを ReleaseDebug vcpkg に割り当てたり、使用するライブラリのバリアントを明示的に指定したりできます。

VcpkgEnableManifest (Vcpkg マニフェストを使用)

ローカル vcpkg.json ファイルから使用するには、このプロパティをtrue設定する必要があります。 に設定すると false、ローカル vcpkg.json ファイルは無視されます。

これは現在、既定値は false〗ですが、将来の既定値 true になります。

VcpkgTriplet (Triplet)

このプロパティは、次のような x64-windows-static ライブラリを使用するトリプレットを制御します arm64-windows

これが明示的に設定されていない場合、vcpkg は Visual Studio の設定に基づいて正しいトリプレットを推測します。 vcpkg は、動的ライブラリ リンケージと動的 CRT リンケージを使用するトリプレットのみを推測します。静的依存関係が必要な場合、または静的 CRT (/MT) を使用する場合は、トリプレットを手動で設定する必要があります。

MSBuild の詳細度を Normal 以上に設定すると、自動的に推定されるトリプレットを確認できます。

ショートカット: Ctrl + Q "ビルドと実行"

ツール -> オプション -> プロジェクトとソリューション -> ビルドと実行 -> MSBuild プロジェクトのビルド出力の詳細

トリプレットも 参照

VcpkgHostTriplet (Host Triplet)

これは、ホストの依存関係の解決に使用するカスタム トリプレットに設定できます。

設定を解除すると、既定で "ネイティブ" トリプレット (x64 ウィンドウ) になります。

「ホストの依存関係」も参照してください。

VcpkgInstalledDir (インストールされたディレクトリ)

このプロパティは、vcpkg がライブラリをインストールして使用する場所を定義します。

マニフェスト モードでは、これは既定で $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\. クラシック モードでは、これは既定で $(VcpkgRoot)\installed\.

VcpkgApplocalDeps (アプリでローカルに DLL をデプロイする)

このプロパティは、vcpkg にインストールされているツリーからプロジェクト出力ディレクトリへの依存 DLL の検出とコピーを有効または無効にします。

VcpkgXUseBuiltInApplocalDeps (組み込みのアプリローカルデプロイを使用する)

このプロパティを有効にすると、アプリでローカルに DLL をデプロイするときに、vcpkg の試験的な組み込みアプリ ローカル DLL 展開実装が使用されます。 このプロパティは削除され、組み込みの実装が実験用でなくなった場合は無効になります。

false の場合 $(VcpkgApplocalDeps) 、このプロパティは無効です。

マニフェスト モードの構成

MSBuild でマニフェスト (vcpkg.json) を使用するには、まず上記のいずれかの統合方法を使用する必要があります。 次に、(ソース リポジトリのルートなど) プロジェクト ファイルの上にvcpkg.jsonを追加し、プロパティ VcpkgEnableManifest を >[ true. このプロパティは、プロジェクト>プロパティ Vcpkg Use Vcpkg>ManifestIDE を使用して設定できます。 vcpkg プロパティ ページを表示するには、IDE の再読み込みが必要な場合があります。

vcpkg は、プロジェクトのビルド中に実行され、ファイルの隣vcpkg.jsonvcpkg_installed/$(VcpkgTriplet)/一覧表示されている依存関係をインストールします。これらのライブラリは自動的に MSBuild プロジェクトに含まれてリンクされます。

既知の問題

  • Visual Studio 2015 では、編集内容とvcpkg-configuration.jsonファイルのvcpkg.json編集が正しく追跡されず、編集されていない限り.cpp、変更には応答しません。

VcpkgAdditionalInstallOptions (その他のオプション)

マニフェストを使用する場合、このオプションは、基になる vcpkg ツールの呼び出しに渡す追加のコマンド ライン フラグを指定します。 これは、別のオプションでまだ公開されていない機能にアクセスするために使用できます。

VcpkgManifestInstall (Vcpkg 依存関係のインストール)

このプロパティは、プロジェクトのビルド中に依存関係の自動復元を無効にするように false 設定できます。 依存関係は、vcpkg コマンド ラインを使用して手動で個別に復元する必要があります。