教程:在 Visual Studio 中使用 CMake 安装和使用包
本教程介绍如何通过 CMake、vcpkg 和 Visual Studio 创建使用 fmt
库的 C++ "Hello World" 程序。 你将安装依赖项、配置、生成和运行简单的应用程序。
先决条件
- 具有 C++ 开发工作负载和 CMake 组件的 Visual Studio
- Git
1 - 设置 vcpkg
克隆存储库
第一步是从 GitHub 克隆 vcpkg 存储库。 存储库包含用于获取 vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。 若要执行此操作,请运行:
git clone https://github.com/microsoft/vcpkg.git
vcpkg 特选注册表是一组数量超过 2000 个的开源库。 这些库已通过 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 UI 的屏幕截图,显示如何在 Visual Studio 中创建新的 CMake 项目
- 将项目命名为 "helloworld"
- 选中“将解决方案和项目放在同一目录中”复选框。
- 单击“创建”按钮
Visual Studio UI 的屏幕截图,用于命名 CMake 项目和单击“创建”按钮。
配置
VCPKG_ROOT
环境变量。在 Visual Studio 中打开内置的开发人员 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 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 命令。生成清单文件并添加依赖项。
运行以下命令来创建 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
文件。- 将
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 集成文档了解详细信息。- 将
编辑
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 - 生成并运行该项目
生成项目。
按下
Ctrl+Shift+B
以在 Visual Studio 中生成项目。运行该应用程序。
最后,运行可执行文件:
Visual Studio UI 的运行可执行文件的屏幕截图。
你应会看到输出:
程序输出的屏幕截图 - "Hello World!"
后续步骤
要了解关于 vcpkg.json
的详细信息,请参阅参考文档:
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈