vcpkg 跟 Visual Studio 都是出自微軟,兩者自然整合的非常好。
我們今天就要來介紹怎麼使用 vcpkg 來搭配 Visual Studio (MSBuild) 來管理第三方函式庫。
今天的目標:
vcpkg integrate install 連接 vcpkg 與 Visual Studio我的開發環境:
關於怎麼安裝,請參考D09。
開啟 Visual Studio,建立一個「主控台應用程式」(Console App)專案。
接著開啟命令列,進入專案根目錄,輸入以下兩個指令:
vcpkg new --application
vcpkg add port fmt nlohmann-json
此時目錄結構如下:
hello-vcpkg-msvc/
├── vcpkg.json # <- 多了這個檔案!
├── vcpkg-configuration.json # <- 還有這個!
├── hello-vcpkg-msvc.sln
├── hello-vcpkg-msvc.vcxproj
└── hello-vcpkg-msvc.cpp
多出兩個檔案:vcpkg.json 和 vcpkg-configuration.json
接下來這一步,每一台電腦只要做一次:
vcpkg integrate install
打完指令後,結果如下:
PS C:\hello-vcpkg-msvc> vcpkg integrate install
Applied user-wide integration for this vcpkg root.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake"
All MSBuild C++ projects can now #include any installed libraries. Linking will be handled automatically. Installing new libraries will make them instantly available.
做完這件事之後,以後所有你創建的 MSBuild C++ 專案,都直接跟我們設定好的 vcpkg git repo 整合,可以導入並使用裡面的第三方套件。
是針對整個使用者帳號的設定,之後新開的專案都不用再做一次。
integrate install 之後,專案屬性裡會多出一頁 vcpkg。
在專案上按右鍵 → 屬性 (Property) -> vcpkg:
![[img-d10-vs-property.png]]
這一步很重要,而且很容易漏掉。vcpkg 的 MSBuild 整合預設模式是 Classic Mode。
而現代專案已經建議一律使用 Menifest Mode 。如果你沒設,之後會發現行為怎麼跟這份教學都不同。
Classic 跟 Manifest 的差別之後會專門寫一篇。
改完之後打開 .vcxproj 看,會多出一段:
<PropertyGroup Label="Vcpkg">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
</PropertyGroup>
hello-vcpkg-msvc.cpp 的內容跟一樣:
#include <fmt/base.h>
#include <nlohmann/json.hpp>
int main() {
nlohmann::json j = {
{"name", "vcpkg"},
{"language", "C++"},
{"stars", 9000}
};
fmt::print("Hello, {}!\n", j["name"].get<std::string>());
fmt::print("{}\n", j.dump(2));
return 0;
}
按下 F5。
第一次建置會比較久,因為如果套件還沒有安裝過,vcpkg 會把原始碼抓下來現場編譯。
全部跑完後,就會印出預期的結果囉:
Hello, vcpkg!
{
"language": "C++",
"name": "vcpkg",
"stars": 9000
}
按下 F5 之後,vcpkg 在背後處理了這幾件事:
.lib 都加進連結器的輸入(這個功能叫 AutoLink)。好處是完全不用設定,壞處是裝了什麼就連什麼,套件一多,連結器的輸入會變得很長。fmt.dll 複製到 exe 旁邊。manifest 模式下套件裝在專案裡的 vcpkg_installed/ 子目錄下
vcpkg_installed/
└── x64-windows/
└── x64-windows/
├── include/
├── lib/
├── bin/
└── debug/
這個目錄是產生的,所以記得把 vcpkg_installed/ 加進 .gitignore 忽略清單裡。
vcpkg 接 Visual Studio 只要簡單幾步:
vcpkg new --application
vcpkg add port 導入套件vcpkg integrate install:一台電腦做一次