教程:在 Visual Studio 中使用 CMake 安装和使用包

本教程介绍如何通过 CMake、vcpkg 和 Visual Studio 创建使用 fmt 库的 C++ "Hello World" 程序。 你将安装依赖项、配置、生成和运行简单的应用程序。

先决条件

1 - 设置 vcpkg

  1. 克隆存储库

    第一步是从 GitHub 克隆 vcpkg 存储库。 存储库包含用于获取 vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。 若要执行此操作,请运行:

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

    vcpkg 特选注册表是一组数量超过 2000 个的开源库。 这些库已通过 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 UI 的屏幕截图,显示如何在 Visual Studio 中创建新的 CMake 项目

    • 将项目命名为 "helloworld"
    • 选中“将解决方案和项目放在同一目录中”复选框。
    • 单击“创建”按钮

    命名 CMake 项目

    Visual Studio UI 的屏幕截图,用于命名 CMake 项目和单击“创建”按钮。

  2. 配置 VCPKG_ROOT 环境变量。

    在 Visual Studio 中打开内置的开发人员 PowerShell 窗口。

    打开内置开发人员 powershell

    Visual Studio UI 内置的 PowerShell 开发人员窗口的屏幕截图

    运行以下命令:

    $env:VCPKG_ROOT = "C:\path\to\vcpkg"
    $env:PATH = "$env:VCPKG_ROOT;$env:PATH"
    

    设置环境变量

    Visual Studio UI 内置的 PowerShell 开发人员窗口的屏幕截图,显示如何设置 VCPKG_ROOT 并将其添加到 PATH。

    在 Visual Studio 中打开开发人员命令提示。

    打开 Visual Studio 开发人员命令提示符。

    Visual Studio UI 的开发人员命令提示的屏幕截图。

    运行以下命令:

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

    设置环境变量

    Visual Studio 开发人员命令提示的屏幕截图,显示如何设置 VCPKG_ROOT 并将其添加到 PATH。

    设置 VCPKG_ROOT 可帮助 Visual Studio 查找 vcpkg 实例。 将它添加到 PATH 确保可以直接从 shell 运行 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 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):使用 fmt 库的 CMake 配置文件查找该库。 REQUIRED 关键字确保在找不到包时生成错误。
    • add_executable(HelloWorld helloworld.cpp):添加从源文件 helloworld.cpp 生成的名为 "HelloWorld," 的可执行目标。
    • 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 的详细信息,请参阅参考文档: