跳到主要内容

在 Visual Studio Code 中使用 CMake 安装和使用包

本教程展示了如何使用 CMake、kmpkg 和 Visual Studio Code 创建一个 C++ “Hello World” 程序,并使用 fmt 库。你将学习如何安装依赖、配置、构建并运行一个简单的应用程序。

前提条件

1 - 设置 kmpkg

  1. 克隆仓库

首先从 GitHub 克隆 kmpkg 仓库。该仓库包含获取 kmpkg 可执行文件的脚本,以及由 kmpkg 社区维护的精选开源库注册表。运行以下命令:

git clone https://github.com/kumose/kmpkg.git

kmpkg 精选注册表包含超过 2000 个开源库。这些库已经通过 kmpkg 的持续集成管道验证可以协同工作。虽然仓库不包含这些库的源码,但包含构建和安装它们所需的配方和元数据。

  1. 运行引导脚本

进入 kmpkg 目录并执行引导脚本:

cd kmpkg && bootstrap-kmpkg.bat

引导脚本会执行前置条件检查并下载 kmpkg 可执行文件。

现在,kmpkg 已经安装并可使用。

2 - 创建项目文件夹

创建一个文件夹存放项目文件,本教程中创建名为 “helloworld” 的文件夹,并用 Visual Studio Code 打开:

mkdir helloworld
code helloworld

3 - 安装 Visual Studio Code 扩展

在扩展视图中,安装 C++ 扩展,启用 C++ IntelliSense 和代码导航。

安装 CMake Tools 扩展,为 Visual Studio Code 提供 CMake 支持。

4 - 设置环境变量

  1. 配置 KMPKG_ROOT 环境变量

在 Visual Studio Code 中打开新终端:Terminal > New Terminal

运行以下命令:

以这种方式设置环境变量只影响当前终端会话。如需在所有会话中永久生效,请通过 Windows 系统环境变量面板进行设置。

$env:KMPKG_ROOT="C:\path\to\kmpkg"
$env:PATH="$env:KMPKG_ROOT;$env:PATH"

设置 KMPKG_ROOT 可以帮助 Visual Studio Code 定位 kmpkg 实例,添加到 PATH 后可以在终端直接运行 kmpkg 命令。

  1. 生成清单文件并添加依赖

helloworld 文件夹根目录运行以下命令生成 kmpkg 清单文件 (kmpkg.json):

kmpkg new --application

该命令会在项目目录中生成 kmpkg.jsonkmpkg-configuration.json 文件。

添加 fmt 作为依赖:

kmpkg add port fmt

此时 kmpkg.json 内容如下:

{
"dependencies": [
"fmt"
]
}

kmpkg 会读取该清单文件安装依赖,并与 CMake 集成,为项目提供所需依赖。

生成的 kmpkg-configuration.json 文件包含 baseline,为项目依赖设定最小版本约束。修改该文件超出本教程范围,但建议将其纳入源代码控制,以确保不同开发环境的一致性。

5 - 设置项目文件

  1. 创建 CMakeLists.txt

在项目根目录创建 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)

各行解释:

  • cmake_minimum_required(VERSION 3.10):指定构建项目所需的最小 CMake 版本。
  • project(HelloWorld):设置项目名称为 HelloWorld。
  • find_package(fmt CONFIG REQUIRED):使用 CMake 配置文件查找 fmt 库,REQUIRED 表示未找到时报错。
  • add_executable(HelloWorld helloworld.cpp):创建名为 HelloWorld 的可执行文件。
  • target_link_libraries(HelloWorld PRIVATE fmt::fmt):链接 fmt 库,PRIVATE 表示仅用于当前目标构建。
  1. 创建 helloworld.cpp
#include <fmt/core.h>

int main()
{
fmt::print("Hello World!\n");
return 0;
}

<fmt/core.h> 用于引入 fmt 库,main() 调用 fmt::print() 输出 “Hello World!”。

  1. 创建 CMake Presets 文件

helloworld 目录创建 CMakePresets.json

CMakePresets.json
{
"version": 2,
"configurePresets": [
{
"name": "kmpkg",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{KMPKG_ROOT}/scripts/buildsystems/kmpkg.cmake"
}
}
]
}

创建 CMakeUserPresets.json

CMakeUserPresets.json
{
"version": 2,
"configurePresets": [
{
"name": "default",
"inherits": "kmpkg",
"environment": {
"KMPKG_ROOT": "<path to kmpkg>"
}
}
]
}

CMakePresets.json 包含 "kmpkg" 预设,设置 CMAKE_TOOLCHAIN_FILE,用于识别 kmpkg 提供的 C++ 库。CMakeUserPresets.json 仅在本地使用,不纳入版本控制。

6 - 构建与运行项目

  1. 使用 View > Command Palette 执行 CMake: Build 命令

选择 default CMake 预设,启用 kmpkg 工具链。

  1. 运行程序
./build/HelloWorld.exe

输出:

Hello World!

下一步

了解更多 kmpkg.json 内容,请参阅参考文档: