vcpkgとCMake(CMakeLists.txtまたはCMakeSettings.jsonのいずれかを使用)を使用してC ++ソフトウェアをビルドします。提供されているサンプルは、DockerとPipeline Cachingも使用して、セルフホストエージェントまたはMicrosoftホストエージェントの両方を使用しています。
vcpkgをサブモジュールとして使用することを強くお勧めします。以下は、vcpkgがGitサブモジュールであるサンプルです。
# Sample when vcpkg is a submodule
# Cache/Restore the vcpkg's build artifacts.
- task: Cache@2
displayName: 'Cache vcpkg's artifacts'
inputs:
# As 'key' use the content of the response file, vcpkg's submodule fetched commit id and the platform name.
# The key must be one liner, each segment separated by pipe char, non-path segments enclosed by
# double quotes.
key: $(Build.SourcesDirectory)/vcpkg_x64-linux.txt | "$(Build.SourcesDirectory)/.git/modules/vcpkg/HEAD" | "$(Agent.OS)"
path: '$(Build.SourcesDirectory)/vcpkg'
- task: run-vcpkg@0
displayName: 'Run vcpkg'
inputs:
# Response file stored in source control, it provides the list of ports and triplet(s).
vcpkgArguments: @$(Build.SourcesDirectory)/vcpkg_x64-linux.txt
# Location of the vcpkg as submodule of the repository.
vcpkgDirectory: $(Build.SourcesDirectory)/vcpkg
- task: run-cmake@0
displayName: 'Run CMake with CMakeSettings.json'
inputs:
cmakeListsOrSettingsJson: 'CMakeSettingsJson'
# Use the vcpkg's toolchain file for CMake.
useVcpkgToolchainFile: true
# Build all configurations whose name starts with "Linux".
configurationRegexFilter: 'Linux.*'
vcpkgがサブモジュールではない場合の別のサンプル(非推奨):
# Sample when vcpkg is NOT a submodule. The exact commit id to be fetched needs
# to be explicitly provided then (i.e. the value of vcpkgGitRef in this sample).
variables:
# Exact vcpkg's version to fetch, commig id or tag name.
vcpkgGitRef: 5a3b46e9e2d1aa753917246c2801e50aaabbbccc
# Cache/restore the vcpkg's build artifacts.
- task: Cache@2
displayName: 'Cache vcpkg's artifacts'
inputs:
key: $(Build.SourcesDirectory)/vcpkg_x64-linux.txt | "$(vcpkgGitRef)" | "$(Agent.OS)"
path: '$(Build.BinariesDirectory)/vcpkg'
- task: run-vcpkg@0
displayName: 'Run vcpkg'
inputs:
vcpkgArguments: @$(Build.SourcesDirectory)/vcpkg_x64-linux.txt
# Specify the exact commit id to fetch.
vcpkgGitCommitId: $(vcpkgGitRef)
# URL to fetch vcpkg from (default is the official one).
vcpkgGitURL: http://my.vcpkg.fork.git/
- task: run-cmake@0
displayName: 'Run CMake with CMakeSettings.json'
inputs:
cmakeListsOrSettingsJson: 'CMakeSettingsJson'
useVcpkgToolchainFile: true
# Build all configurations whose name starts with "Linux".
configurationRegexFilter: 'Linux.*'
タスクは次の手順を完了します。
vcpkgDirectory(たとえば、vcpkgは親リポジトリとともにチェックアウトされたGitリポジトリのサブモジュールである可能性があります)。
タスクは
RUNVCPKG_VCPKG_ROOTタスク変数を設定します。これは、後続の「run-cmake」によって自動的に使用され、vcpkgのツールチェーンファイルを消費します。
注:
VCPKGRUN_VCPKG_ROOT次の条件の最初の条件によってタスクによって設定されます。
vcpkgArguments入力タスクが含まれている
--triplet引数を、
--triplet引数が含まれています。
vcpkgTriplet入力タスクは値に設定されます。
このような場合、最初のヒットによって
RUNVCPKG_VCPKG_ROOT変数の内容が決まります。他のすべての場合、変数は設定され
run-cmakeず、タスクインスタンスはvcpkgのツールチェーンパスもトリプレットも再利用できません。
このvcpkgを使用するときは、具体的にどのように機能するかに注意してください。
2019.07、使用されているvcpkgリポジトリのコミットIDまたはタグ(リリースタグなど)によって識別されます。
要約すると、ローカルビルド環境とリモートビルド環境の間で一貫した開発エクスペリエンスを維持するために、Gitリポジトリのサブモジュールとしてvcpkgを使用することを強くお勧めします。このように、使用されるvcpkgのバージョンは、vcpkgのサブモジュールによって指定されたコミットIDによって暗示されます。
vcpkgは、引数を含む応答ファイルを受け入れます。インストールするポートのリストを含むテキストファイルをソース管理下に保存すると便利です。これは、vcpkgをローカルおよびビルドサーバーでまったく同じ方法で実行するのに役立ちます。たとえば、実行する場合:
vcpkg install boost zlib:x64 libmodbus --triplet x64
代わりに実行することが可能です
vcpkg install @ response_file.txt
response_file.txt含む場所(末尾の空白は許可されません):
boost
zlib:x64
libmodbus
--triplet
x64
ビルド時間を最小限にするために、キャッシュのタスクが(で指定された全体vcpkgのディレクトリキャッシュするために使用されるべき
vcpkgDirectoryの「実行vcpkg」タスク)。
注:
installedサブディレクトリと
vcpkg実行可能ファイルのみをキャッシュする必要があるため、それら以外はすべて
.artifactignore、vcpkg-runタスクによって生成されたファイルによって除外されます。
key提供されるキャッシュのタスク一意に次のことを確認する必要があります。
次のサンプルキーは、上記のほとんどを許可するはずです。
key: $(vcpkgCommitId)| @$(Build.SourcesDirectory)/response_file_with_ports_and_triplet.txt | "$(Agent.OS)"
どこ:
$(vcpkgCommitId)Gitの手段によって識別vcpkgの特定のバージョンは、IDまたはタグをコミット。リポジトリのサブモジュールとして、たとえばルートでvcpkgを使用することをお勧めします
$(Build.SourcesDirectory)/.git/modules/vcpkg/HEAD。このような場合、コミットIDはファイルに保存されます。ブランチ名はvcpkgのバージョンを一意に識別しないため、使用しないでください。
応答ファイルには、ポートのリストとトリプレットが含まれています。たとえば、
sqlite3 --triplet x64-linuxまたは別の同じ例
sqlite3:x64-windowsです。
--triplet引数は、ポートがトリプレットが指定されていないデフォルト値を指定します。
$(Agent.OS)ビルドエージェントプラットフォームのみをキャプチャします。必要に応じて、ビルド時に使用されるツールセットを一意に識別するために、キーにさらに値を追加すると便利な場合があります。
注:キーは1つのライナーである必要があり、パイプ文字でセグメントに分割できます。ファイルパス以外の各セグメントは二重引用符で囲む必要があります。文書化されているように、ファイルパスセグメントの場合、ハッシュ値が計算されますが、非ファイルパスセグメントの値はそのまま使用されます。
「実行cmakeの」タスクはCMakeLists.txtとで動作しますCMakeSettings.json。 タスク変数を使用して、「run-vcpkg」タスクの以前の実行を活用でき
RUNVCPKG_VCPKG_ROOTます。
$RUNVCPKG_VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake;に設定します。
$RUNVCPKG_VCPKG_ROOT/vcpkg env。
フローチャートには、
CMakeLists.txtまたは
CMakeSettings.jsonファイルで使用できる2つのエントリポイントがあります。
注:タスクは、
CMakeSettings.jsonと呼ばれるの属性を使用しません
inheritEnvironments。代わりに、「run-vcpkg」によって設定されたトリプレットは、コマンドが実行される環境変数を設定するためにタスクによって使用されます。これは、適切なターゲット(x86、x64、armなど)を設定するために環境をセットアップする必要があるMSVCを使用する場合にのみ役立ちます。
注:タスクは
buildRoot、CMakeSettings.jsonで指定された値を無視します。
buildDirectory入力パラメータを使用してCMakeバイナリディレクトリを指定することができます
$(Build.ArtifactStagingDirectory)/<configuration name>。デフォルトではです。
タスクのすべての入力の完全なリファレンスが提供されます。
プロジェクト:Microsoft MSVC STL | |
---|---|
キャッシュ付きMSVCSTL、vcpkgサブモジュール |
プロジェクト:Microsoft MSVC STL(フォーク) | |
---|---|
キャッシュ付きMSVCSTL、vcpkgサブモジュール、セルフホストエージェントDockerベース | |
キャッシュ付きMSVCSTL、vcpkgサブモジュール、MSホストエージェントDockerベース |
プロジェクト:Microsoft cpprestsdk | |
---|---|
マックOS | |
Linux / Ubuntu | |
vs2017 | |
vs2019 |
プロジェクト:呼び起こす | |
---|---|
macOS / Linux / Windows |
プロジェクト:sysmakeshift | |
---|---|
macOS / Linux / Windows |
プロジェクト:helgoboss-midi | |
---|---|
macOS / Linux / Windows |
プロジェクト:vct | |
---|---|
macOS / Linux / Windows |
プロジェクト:CppOpenGLWebAssemblyCMake | |
---|---|
webassembly(Dockerを使用)/ Linux / macOS / Windows |
プロジェクト:DisCPP | |
---|---|
Linux / Windows |
CMakeなしでvcpkgを使用できるからです。または、vcpkgなしでCMakeを使用することもできます。
絶対に!誰でもこのタスクを、特定のニーズに合わせて独自のスクリプトを作成するためのインスピレーションとして使用できます。タスクの目的は、ビルドサーバーでのvcpkgとCMakeの使用を合理化および簡素化することです。
実際、キャッシュが復元されているときにvcpkgを実行する必要はなく、キャッシュタスクの
cacheHitVarパラメータを使用して「run-vcpkg」タスクの実行を制御できます。現在、「run-vcpkg」タスクはサニティチェックとしてvcpkgを防御的に実行します。要求されたすべてのポートがすでにインストールされていることをビルドログに出力し、無視できる時間を費やす必要があります。
ソフトウェアは現状のまま提供され、いかなる種類の保証もありません。すべてのユーザーは、ソースコードを入手し、修正と新機能でタスクを改善することをお勧めします。
詳細な開発手順については、CONTRIBUTING.mdをお読みください。
このリポジトリ内のすべてのコンテンツ、拡張機能、および「run-cmake」タスクと「run-vcpkg」タスクは、MITライセンスの下でライセンスされています。
Copyright(c)2019-2020 Luca Cappa