教學課程:在Visual Studio中搭配 CMake 安裝和使用套件
本教學課程說明如何建立C++ “Hello World” 程式,以搭配 CMake、vcpkg 和 Visual Studio 使用 fmt
連結庫。 您將安裝相依性、設定、建置和執行簡單的應用程式。
必要條件
1 - 設定 vcpkg
複製存放庫
第一個步驟是從 GitHub 複製 vcpkg 存放庫。 存放庫包含可取得 vcpkg 可執行文件的腳本,以及 vcpkg 社群所維護之策劃開放原始碼連結庫的登錄。 若要這樣做,請執行:
git clone https://github.com/microsoft/vcpkg.git
vcpkg 策展登錄是一組超過 2,000 個開放原始碼連結庫。 這些連結庫已由 vcpkg 的持續整合管線進行驗證,以共同運作。 雖然 vcpkg 存放庫不包含這些連結庫的原始程式碼,但它會保存配方和元數據,以在您的系統中建置並安裝它們。
執行啟動程式腳本
既然您已複製 vcpkg 存放庫,請瀏覽至
vcpkg
目錄並執行啟動程式腳本:cd vcpkg && bootstrap-vcpkg.bat
cd vcpkg; .\bootstrap-vcpkg.bat
cd vcpkg && ./bootstrap-vcpkg.sh
啟動程式腳本會執行必要條件檢查,並下載 vcpkg 可執行檔。
介紹完畢 vcpkg 已設定且可供使用。
2 - 設定 Visual Studio 專案
建立 Visual Studio 專案
- 使用 「CMake 專案」 樣本在 Visual Studio 中建立新專案
顯示如何在Visual Studio中建立新 CMake 專案的Visual Studio UI 螢幕快照
- 將專案命名為 “helloworld”
- 核取 [將方案與專案放在相同目錄中] 的方塊。
- 按兩下 [建立] 按鈕
Visual Studio UI 的螢幕快照,用於命名 CMake 專案,然後按兩下 [建立] 按鈕。
設定
VCPKG_ROOT
環境變數。注意
以這種方式設定環境變數只會影響目前的終端機會話。 若要在所有工作階段中永久進行這些變更,請透過 [Windows 系統環境變數] 面板加以設定。
在 Visual Studio 中開啟內建的開發人員 PowerShell 視窗。
內建 PowerShell 開發人員視窗的 Visual Studio UI 螢幕快照
執行下列命令:
$env:VCPKG_ROOT="C:\path\to\vcpkg" $env:PATH="$env:VCPKG_ROOT;$env:PATH"
內建 PowerShell 開發人員視窗的 Visual Studio UI 螢幕快照,其中顯示如何設定VCPKG_ROOT,並將其新增至 PATH。
在 Visual Studio 中開啟開發人員命令提示字元。
Visual Studio UI for developer 命令提示字元的螢幕快照。
執行下列命令:
set "VCPKG_ROOT=C:\path\to\vcpkg" set PATH=%VCPKG_ROOT%;%PATH%
Visual Studio 開發人員命令提示字元的螢幕快照,其中顯示如何設定VCPKG_ROOT,並將其新增至PATH。
設定
VCPKG_ROOT
可協助 Visual Studio 找出您的 vcpkg 實例。 新增它以確保PATH
您可以直接從殼層執行 vcpkg 命令。產生指令清單檔案並新增相依性。
執行下列命令以建立 vcpkg 指令清單檔案 (
vcpkg.json
):vcpkg new --application
命令
vcpkg new
會在項目的目錄中新增vcpkg.json
檔案和vcpkg-configuration.json
檔案。fmt
將套件新增為相依性:vcpkg add port fmt
您
vcpkg.json
現在應該包含:{ "dependencies": [ "fmt" ] }
這是您的指令清單檔案。 vcpkg 會讀取指令清單檔,以瞭解要安裝和整合哪些相依性與 CMake,以提供專案所需的相依性。
產生的
vcpkg-configuration.json
檔案引進了基準,以將最低版本條件約束放在專案的相依性上。 修改此檔案超出本教學課程的範圍。 雖然本教學課程不適用,但最好讓vcpkg-configuration.json
檔案保持在原始檔控制之下,以確保不同開發環境之間的版本一致性。
3 - 設定項目檔
修改
helloworld.cpp
檔案。將的內容
helloworld.cpp
取代為下列程式代碼:#include <fmt/core.h> int main() { fmt::print("Hello World!\n"); return 0; }
此原始程式檔包含屬於連結
<fmt/core.h>
庫的fmt
標頭。 函main()
式會呼叫fmt::print()
,將 “Hello World!” 訊息輸出至控制台。配置檔案
CMakePresets.json
。當設定為使用 vcpkg 的自定義工具鏈時
CMAKE_TOOLCHAIN_FILE
,CMake 可以自動連結 vcpkg 所安裝的連結庫。 這可以使用 CMake 預設檔案進行編譯。變更
CMakePresets.json
以符合下列內容:{ "version": 2, "configurePresets": [ { "name": "vcpkg", "generator": "Ninja", "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" } } ] }
使用下列內容建立
CMakeUserPresets.json
:{ "version": 2, "configurePresets": [ { "name": "default", "inherits": "vcpkg", "environment": { "VCPKG_ROOT": "<path to vcpkg>" } } ] }
檔案
CMakePresets.json
包含名為 「vcpkg」 的單一預設,可設定CMAKE_TOOLCHAIN_FILE
變數。 檔案會將CMakeUserPresets.json
VCPKG_ROOT
環境變數設定為指向包含您本機安裝 vcpkg 之絕對路徑。 建議您不要簽CMakeUserPresets.json
入版本控制系統。編輯
CMakeLists.txt
檔案。以下列程式碼來取代
CMakeLists.txt
檔案的內容:cmake_minimum_required(VERSION 3.10) project(HelloWorld) find_package(fmt CONFIG REQUIRED) add_executable(HelloWorld helloworld.cpp) target_link_libraries(HelloWorld PRIVATE fmt::fmt)
現在,讓我們細分檔案中
CMakeLists.txt
每一行的功能:cmake_minimum_required(VERSION 3.10)
:指定建置專案所需的 CMake 最低版本為 3.10。 如果您的系統上安裝的 CMake 版本低於此版本,組建就會失敗。project(HelloWorld)
:將專案的名稱設定為 「HelloWorld」。。find_package(fmt CONFIG REQUIRED)
:使用其 CMake 組態檔尋找連結fmt
庫。 關鍵詞REQUIRED
可確保找不到套件時,會產生錯誤。add_executable(HelloWorld helloworld.cpp)
:新增名為 「HelloWorld」 的可執行檔目標,從原始程式檔helloworld.cpp
建置。target_link_libraries(HelloWorld PRIVATE fmt::fmt)
:指定HelloWorld
可執行文件應該連結至fmt
連結庫。 關鍵詞PRIVATE
表示fmt
只需要建置HelloWorld
,且不應該傳播至其他相依專案。
4 - 建置並執行專案
組建專案。
按
Ctrl+Shift+B
以在Visual Studio中建置專案。執行應用程式。
最後,執行可執行檔:
用於執行可執行檔的 Visual Studio UI 螢幕快照。
您應該會看到以下輸出:
程序輸出的螢幕快照 - “Hello World!”
下一步
若要深入瞭解 vcpkg.json
,請參閱我們的參考檔: