共用方式為


MSBuild 專案中的 vcpkg

整合方法

全使用者整合

若要在 MSBuild 專案中使用 vcpkg,請執行下列命令:

vcpkg integrate install

您只需要 vcpkg integrate install 在第一次啟用 MSBuild 整合時執行命令。 這可讓您針對所有現有和未來的項目進行 MSBuild 整合。

如果您有多個 vcpkg 實例,您可以使用 vcpkg integrate install 命令來更新 MSBuild 內所使用的 vcpkg 實例。 使用 vcpkg integrate remove 移除 MSBuild 全使用者整合。

此整合方法會自動將 vcpkg 安裝的套件新增至下列專案屬性:包含目錄、鏈接目錄和連結庫。 此外,這會建立建置後動作,以確保任何必要的 DLL 會複製到組建輸出資料夾中。 這適用於所有使用 Visual Studio 2015 或更新版本的解決方案和專案。

對於絕大多數連結庫而言,您只需要這麼做。 不過,某些連結庫會執行衝突的行為,例如重新定義 main()。 由於您必須選擇每個專案想要的衝突選項,因此您必須手動將這些連結庫新增至連結器輸入。

以下是一些需要手動連結的範例(並非詳盡的清單):

  • Gtest 提供 gtestgmockgtest_maingmock_main
  • SDL2 提供 SDL2main
  • SFML 提供 sfml-main
  • Boost.Test 提供 boost_test_exec_monitor

若要取得所有已安裝套件的完整清單,請執行 vcpkg owns manual-link

匯入 .props.targets

vcpkg 也可以藉由明確地將 scripts/buildsystems/vcpkg.propsscripts/buildsystems/vcpkg.targets 檔案匯入每個 .vcxproj,整合到 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>

如需 和 Directory.Build.props的詳細資訊Directory.Build.targets,請參閱官方 MSBuild 檔的自定義組建一節。

連結的 NuGet 套件

注意

不建議針對新專案使用此方法,因為很難與其他項目共用。 如需可攜式獨立 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"

注意

產生的 NuGet 套件不包含實際的連結庫。 相反地,它的作用就像是 vcpkg 安裝的快捷方式(或符號連結),並且會以任何變更來「自動」更新連結庫。 您不需要重新產生或更新 NuGet 套件。

一般組態

VcpkgEnabled (使用 Vcpkg)

這可設定為 「false」 以明確停用專案的 vcpkg 整合

VcpkgConfiguration (Vcpkg 組態)

如果您的組態名稱太複雜,vcpkg 無法正確猜測,您可以將此屬性指派給 ReleaseDebug 明確告知 vcpkg 您想要取用的連結庫變體。

VcpkgEnableManifest (使用 Vcpkg 指令清單)

這個屬性必須設定 true 為 ,才能從本機 vcpkg.json 檔案取用。 如果設定為 false,則會忽略任何本機 vcpkg.json 檔案。

這目前預設為 false,但未來會預設為 true

VcpkgTriplet (三重)

這個屬性會控制三重項,以取用的連結庫,例如 x64-windows-staticarm64-windows

如果未明確設定,vcpkg 會根據您的Visual Studio設定來推算正確的三重。 vcpkg 只會推斷使用動態連結庫連結和動態CRT連結的三胞胎;如果您想要靜態相依性或使用靜態 CRT (/MT),則必須手動設定三重。

您可以將 MSBuild 詳細資訊設定為 Normal 或更新版本,以查看自動推斷的三元:

快捷方式:Ctrl+Q「建置並執行」

工具 - 選項 ->> 專案和方案 -> 建置和執行 -> MSBuild 專案建置輸出詳細資訊

請參閱三胞胎

VcpkgHostTriplet (主持人三重)

這可以設定為自定義三元組,以用來解析主機相依性。

如果未設定,這會預設為 「native」 triplet (x64-windows)。

請參閱主機相依性

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。 您可以在 Project 屬性>Vcpkg 使用 Vcpkg>指令清單透過 IDE 來設定此屬性。 您可能需要重載 IDE 才能看到 vcpkg 屬性頁。

vcpkg 會在專案的建置期間執行,並將任何列出的相依性安裝到 vcpkg_installed/$(VcpkgTriplet)/ 檔案相鄰 vcpkg.json ;這些連結庫會自動包含在 MSBuild 專案中並連結至您的 MSBuild 專案。

已知問題

  • Visual Studio 2015 無法正確追蹤 和 vcpkg-configuration.json 檔案的vcpkg.json編輯,而且除非.cpp已編輯 ,否則不會響應變更。

VcpkgAdditionalInstallOptions (其他選項)

使用指令清單時,此選項會指定要傳遞至基礎 vcpkg 工具調用的其他命令行旗標。 這可用來存取尚未透過另一個選項公開的功能。

VcpkgManifestInstall (安裝 Vcpkg 相依性)

這個屬性可以設定為 false ,在專案建置期間停用自動相依性還原。 相依性必須透過 vcpkg 命令行個別手動還原。