教學課程:在Visual StudioCode中搭配 CMake 安裝和使用套件
本教學課程說明如何建立 C++ “Hello World” 程式,以搭配 CMake、vcpkg 和 Visual Studio Code 使用 fmt
連結庫。 您將安裝相依性、設定、建置和執行簡單的應用程式。
必要條件
- Visual Studio Code
- C++ 編譯器
- Windows 7 或更新版本
此範例會在 Visual Studio C++ 開發工作負載中使用 C++ MSVC 編譯程式。
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 Code 延伸模組
流覽至 [擴充功能] 檢視,然後安裝 C++ 延伸模組。 這可啟用 C++ IntelliSense 和程式代碼流覽。
Visual Studio Code 擴充功能檢視與 C++ 延伸模組的螢幕快照
安裝 CMake 工具擴充功能。 這可在Visual StudioCode中啟用 CMake 支援。
Visual Studio Code 擴充功能檢視與 CMake 工具延伸模組的螢幕快照
3 - 設定 vcpkg
- 設定
VCPKG_ROOT
環境變數。
在 Visual Studio Code 中開啟新的終端機: 終端 > 機新終端機
執行下列命令:
$env:VCPKG_ROOT="C:\path\to\vcpkg"
$env:PATH="$env:VCPKG_ROOT;$env:PATH"
設定VCPKG_ROOT並將其新增至Visual Studio Code終端機中PATH的螢幕快照。
注意
以這種方式設定環境變數只會影響目前的終端機會話。 若要在所有工作階段中永久進行這些變更,請透過 [Windows 系統環境變數] 面板加以設定。
set "VCPKG_ROOT=C:\path\to\vcpkg"
set PATH=%VCPKG_ROOT%;%PATH%
注意
以這種方式設定環境變數只會影響目前的終端機會話。 若要在所有工作階段中永久進行這些變更,請透過 [Windows 系統環境變數] 面板加以設定。
export VCPKG_ROOT=/c/path/to/vcpkg
export PATH=$PATH:$VCPKG_ROOT
注意
使用 export
命令設定環境變數只會影響目前的殼層會話。 若要讓此變更在會話之間永久完成,請將 命令新增 export
至殼層的配置檔腳本(例如 ~/.bashrc
或 ~/.zshrc
)。
設定 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 會讀取指令清單檔,以瞭解要安裝和整合哪些相依性與 MSBuild,以提供專案所需的相依性。
產生的vcpkg-configuration.json
檔案引進了基準,以將最低版本條件約束放在專案的相依性上。 修改此檔案超出本教學課程的範圍。 雖然本教學課程不適用,但最好讓 vcpkg-configuration.json
檔案保持在原始檔控制之下,以確保不同開發環境之間的版本一致性。
3 - 設定項目檔
CMakeLists.txt
使用下列內容建立檔案:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld)
find_package(fmt CONFIG REQUIRED)
add_executable(HelloWorld main.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 main.cpp)
:新增名為 「HelloWorld」 的可執行檔目標,從原始程式檔main.cpp
建置。target_link_libraries(HelloWorld PRIVATE fmt::fmt)
:指定HelloWorld
可執行文件應該連結至fmt
連結庫。 關鍵詞PRIVATE
表示fmt
只需要建置HelloWorld
,且不應該傳播至其他相依專案。
helloworld.cpp
使用下列內容建立檔案:
#include <fmt/core.h>
int main()
{
fmt::print("Hello World!\n");
return 0;
}
在此 helloworld.cpp
檔案中, <fmt/core.h>
會包含使用連結庫的 fmt
標頭。 函式 main()
接著會呼叫 fmt::print()
,將 “Hello World!” 訊息輸出至控制台。
若要允許 CMake 專案系統辨識 vcpkg 所提供的 C++ 連結庫,您必須提供 vcpkg.cmake
工具鏈檔案。 若要將此作業自動化,請使用下列內容在 「helloworld」 目錄中建立 CMakePresets.json
檔案:
{
"version": 2,
"configurePresets": [
{
"name": "vcpkg",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}
}
]
}
使用下列內容在 「helloworld」 目錄中建立 CMakeUserPresets.json
檔案:
{
"version": 2,
"configurePresets": [
{
"name": "default",
"inherits": "vcpkg",
"environment": {
"VCPKG_ROOT": "<path to vcpkg>"
}
}
]
}
此 CMakePresets.json
檔案包含 CMake 的單一 「vcpkg」 預設值,並設定 CMAKE_TOOLCHAIN_FILE
變數。 CMAKE_TOOLCHAIN_FILE
允許 CMake 專案系統辨識 vcpkg 所提供的 C++ 連結庫。 只有在 CMakePresets.json
本機使用時 CMakeUserPresets.json
,才應該簽入原始檔控制。
4 - 建置並執行專案
- 流覽至檢視
CMake: Build
>命令選擇區中的命令選擇區,以執行專案
在 Visual Studio Code 中選取 CMake 建置命令的螢幕快照。
default
選取 CMake 預設。 這會啟用 vcpkg 工具鏈。
在 Visual Studio Code 中選取 CMake 建置命令中預設的螢幕快照。
- 啟動專案
您應該會看到以下輸出:
Hello World!
下一步
若要深入瞭解 vcpkg.json
,請參閱我們的參考檔:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應