教學課程:在Visual Studio中搭配 CMake 安裝和使用套件

本教學課程說明如何建立 C++ “Hello World” 程式,以搭配 CMake、vcpkg 和 Visual Studio 使用 fmt 連結庫。 您將安裝相依性、設定、建置和執行簡單的應用程式。

必要條件

1 - 設定 vcpkg

  1. 複製存放庫

    第一個步驟是從 GitHub 複製 vcpkg 存放庫。 存放庫包含可取得 vcpkg 可執行文件的腳本,以及 vcpkg 社群所維護之策劃開放原始碼連結庫的登錄。 若要這樣做,請執行:

    git clone https://github.com/microsoft/vcpkg.git
    

    vcpkg 策展登錄是一組超過 2,000 個開放原始碼連結庫。 這些連結庫已由 vcpkg 的持續整合管線進行驗證,以共同運作。 雖然 vcpkg 存放庫不包含這些連結庫的原始程式碼,但它會保存配方和元數據,以在您的系統中建置並安裝它們。

  2. 執行啟動程式腳本

    既然您已複製 vcpkg 存放庫,請瀏覽至 vcpkg 目錄並執行啟動程式腳本:

    cd vcpkg && bootstrap-vcpkg.bat
    
    cd vcpkg; .\bootstrap-vcpkg.bat
    
    cd vcpkg && ./bootstrap-vcpkg.sh
    

    啟動程式腳本會執行必要條件檢查,並下載 vcpkg 可執行檔。

    介紹完畢 vcpkg 已設定且可供使用。

2 - 設定 Visual Studio 專案

  1. 建立 Visual Studio 專案

    • 使用 「CMake 專案」 樣本在 Visual Studio 中建立新專案

    建立新的 CMake 專案

    顯示如何在Visual Studio中建立新 CMake 專案的Visual Studio UI 螢幕快照

    • 將專案命名為 “helloworld”
    • 核取 [將方案與專案放在相同目錄中] 的方塊。
    • 按兩下 [建立] 按鈕

    為您的 CMake 專案命名

    Visual Studio UI 的螢幕快照,用於命名 CMake 專案,然後按兩下 [建立] 按鈕。

  2. 設定 VCPKG_ROOT 環境變數。

    在 Visual Studio 中開啟內建的開發人員 PowerShell 視窗。

    開啟內建開發人員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。

    注意

    以這種方式設定環境變數只會影響目前的終端機會話。 若要在所有工作階段中永久進行這些變更,請透過 [Windows 系統環境變數] 面板加以設定。

    在 Visual Studio 中開啟開發人員命令提示字元。

    開啟 Visual Studio 開發人員命令提示字元。

    Visual Studio UI for developer 命令提示字元的螢幕快照。

    執行下列命令:

    set VCPKG_ROOT="C:\path\to\vcpkg"
    set PATH=%VCPKG_ROOT%;%PATH%
    

    設定環境變數

    Visual Studio 開發人員命令提示字元的螢幕快照,其中顯示如何設定VCPKG_ROOT,並將其新增至PATH。

    注意

    以這種方式設定環境變數只會影響目前的終端機會話。 若要在所有工作階段中永久進行這些變更,請透過 [Windows 系統環境變數] 面板加以設定。

    設定 VCPKG_ROOT 可協助 Visual Studio 找出您的 vcpkg 實例。 新增它以確保 PATH 您可以直接從殼層執行 vcpkg 命令。

  3. 產生指令清單檔案並新增相依性。

    執行下列命令以建立 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 - 設定項目檔

  1. 修改檔案 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!” 訊息輸出至控制台。

  2. 配置檔案 CMakePresets.json

    • CMakePresets.json 檔案重新命名為 CMakeUserPresets.json
    • 更新其內容,如下所示。 將取代 <VCPKG_ROOT> 為您的 vcpkg 目錄路徑。
    {
      "version": 2,
      "configurePresets": [
        {
          "name": "default",
          "generator": "Ninja",
          "binaryDir": "${sourceDir}/build",
          "cacheVariables": {
            "CMAKE_TOOLCHAIN_FILE": "<VCPKG_ROOT>/scripts/buildsystems/vcpkg.cmake"
          }
        }
      ]
    }
    
    • 由於此檔案包含硬式編碼的絕對路徑,因此建議您不要將此檔案保留在原始檔控制之下。 如果您使用 Git,請將 新增 CMakeUserPresets.json 至您的 .gitignore 檔案。

    檔案 CMakeUserPresets.json 包含名為 「default」 的單一預設,此預設會將 設定 CMAKE_TOOLCHAIN_FILE 為使用 vcpkg 的 CMake 工具鏈檔案。 這可讓 vcpkg 在設定和建置專案時,將套件提供給 CMake。 若要深入瞭解, 請閱讀 vcpkg CMake 整合檔

  3. 編輯 CMakeLists.txt 檔案。

    以下列程式碼來取代 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 helloworld.cpp):新增名為 「HelloWorld」 的可執行檔目標,從原始程式檔 helloworld.cpp建置。
    • target_link_libraries(HelloWorld PRIVATE fmt::fmt):指定 HelloWorld 可執行文件應該連結至 fmt 連結庫。 關鍵詞 PRIVATE 表示 fmt 只需要建置 HelloWorld ,且不應該傳播至其他相依專案。

4 - 建置並執行專案

  1. 組建專案。

    Ctrl+Shift+B 以在Visual Studio中建置專案。

  2. 執行應用程式。

    最後,執行可執行檔:

    執行可執行檔

    用於執行可執行檔的 Visual Studio UI 螢幕快照。

    您應該會看到以下輸出:

    程序輸出

    程序輸出的螢幕快照 - “Hello World!”

下一步

若要深入瞭解 vcpkg.json,請參閱我們的參考檔: