在 Visual Studio Code 中使用 CMake 安装和使用包
本教程展示了如何使用 CMake、kmpkg 和 Visual Studio Code 创建一个 C++ “Hello World” 程序,并使用 fmt 库。你将学习如何安装依赖、配置、构建并运行一个简单的应用程序。
前提条件
- Visual Studio Code
- C++ 编译器
- Windows 7 或更新版本
- Git
- Ninja
1 - 设置 kmpkg
- 克隆仓库
首先从 GitHub 克隆 kmpkg 仓库。该仓库包含获取 kmpkg 可执行文件的脚本,以及由 kmpkg 社区维护的精选开源库注册表。运行以下命令:
git clone https://github.com/kumose/kmpkg.git
kmpkg 精选注册表包含超过 2000 个开源库。这些库已经通过 kmpkg 的持续集成管道验证可以协同工作。虽然仓库不包含这些库的源码,但包含构建和安装它们所需的配方和元数据。
- 运行引导脚本
进入 kmpkg 目录并执行引导脚本:
- cmd
- powershell
- bash
cd kmpkg && bootstrap-kmpkg.bat
cd kmpkg; .\bootstrap-kmpkg.bat
cd kmpkg && ./bootstrap-kmpkg.sh
引导脚本会执行前置条件检查并下载 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 - 设置环境变量
- 配置
KMPKG_ROOT环境变量
在 Visual Studio Code 中打开新终端:Terminal > New Terminal
运行以下命令:
- powershell
- cmd
- bash
以这种方式设置环境变量只影响当前终端会话。如需在所有会话中永久生效,请通过 Windows 系统环境变量面板进行设置。
$env:KMPKG_ROOT="C:\path\to\kmpkg"
$env:PATH="$env:KMPKG_ROOT;$env:PATH"

以这种方式设置环境变量只影响当前终端会话。如需在所有会话中永久生效,请通过 Windows 系统环境变量面板进行设置。
set "KMPKG_ROOT=C:\path\to\kmpkg"
set PATH=%KMPKG_ROOT%;%PATH%
使用
export命令只会影响当前 shell 会话。如需永久生效,请将命令添加到 shell 配置文件(如~/.bashrc或~/.zshrc)。
export KMPKG_ROOT=/c/path/to/kmpkg
export PATH=$PATH:$KMPKG_ROOT
设置 KMPKG_ROOT 可以帮助 Visual Studio Code 定位 kmpkg 实例,添加到 PATH 后可以在终端直接运行 kmpkg 命令。
- 生成清单文件并添加依赖
在 helloworld 文件夹根目录运行以下命令生成 kmpkg 清单文件 (kmpkg.json):
kmpkg new --application
该命令会在项目目录中生成 kmpkg.json 和 kmpkg-configuration.json 文件。
添加 fmt 作为依赖:
kmpkg add port fmt
此时 kmpkg.json 内容如下:
{
"dependencies": [
"fmt"
]
}
kmpkg 会读取该清单文件安装依赖,并与 CMake 集成,为项目提供所需依赖。
生成的 kmpkg-configuration.json 文件包含 baseline,为项目依赖设定最小版本约束。修改该文件超出本教程范围,但建议将其纳入源代码控制,以确保不同开发环境的一致性。
5 - 设置项目文件
- 创建
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表示仅用于当前目标构建。
- 创建
helloworld.cpp
#include <fmt/core.h>
int main()
{
fmt::print("Hello World!\n");
return 0;
}
<fmt/core.h> 用于引入 fmt 库,main() 调用 fmt::print() 输出 “Hello World!”。
- 创建 CMake Presets 文件
在 helloworld 目录创建 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:
{
"version": 2,
"configurePresets": [
{
"name": "default",
"inherits": "kmpkg",
"environment": {
"KMPKG_ROOT": "<path to kmpkg>"
}
}
]
}
CMakePresets.json 包含 "kmpkg" 预设,设置 CMAKE_TOOLCHAIN_FILE,用于识别 kmpkg 提供的 C++ 库。CMakeUserPresets.json 仅在本地使用,不纳入版本控制。
6 - 构建与运行项目
- 使用 View > Command Palette 执行
CMake: Build命令
选择 default CMake 预设,启用 kmpkg 工具链。
- 运行程序
- cmd
- bash
./build/HelloWorld.exe
./build/HelloWorld
输出:
Hello World!
下一步
了解更多 kmpkg.json 内容,请参阅参考文档: