使用 CMake 安装和使用包
本教程将展示如何创建一个使用 fmt 库的 C++ “Hello World” 程序,并使用 CMake 和 kmpkg 来安装依赖、配置、构建和运行简单应用。
前提条件
对于 Windows 用户,C++ 开发必须使用 Visual Studio 提供的 MSVC(Microsoft Visual C++ 编译器)。
1 - 设置 kmpkg
-
克隆仓库
首先从 GitHub 克隆 kmpkg 仓库。该仓库包含获取 kmpkg 可执行文件的脚本以及由 kmpkg 社区维护的精选开源库注册表。执行命令:
git clone https://github.com/kumose/kmpkg.gitkmpkg 的精选注册表包含超过 2000 个开源库,这些库通过 kmpkg 持续集成管道验证可协同工作。仓库本身不包含这些库的源代码,但提供了构建和安装它们所需的配方和元数据。
-
运行 bootstrap 脚本
进入
kmpkg目录并执行 bootstrap 脚本:
- cmd
- powershell
- bash
cd kmpkg && bootstrap-kmpkg.bat
cd kmpkg; .\bootstrap-kmpkg.bat
cd kmpkg && ./bootstrap-kmpkg.sh
bootstrap 脚本会进行前置条件检查并下载 kmpkg 可执行文件。
至此,kmpkg 已安装完成,可直接使用。
2 - 设置项目
- 配置
KMPKG_ROOT环境变量。
- bash
- cmd
- powershell
export KMPKG_ROOT=/path/to/kmpkg
export PATH=$KMPKG_ROOT:$PATH
使用
export设置的环境变量仅对当前 shell 会话有效。如需在所有会话中生效,请将命令添加到 shell 配置文件(如~/.bashrc或~/.zshrc)中。
set "KMPKG_ROOT=C:\path\to\kmpkg"
set PATH=%KMPKG_ROOT%;%PATH%
使用此方式仅对当前终端会话有效。如需长期生效,请通过 Windows 系统环境变量面板设置。
$env:KMPKG_ROOT = "C:\path\to\kmpkg"
$env:PATH = "$env:KMPKG_ROOT;$env:PATH"
使用此方式仅对当前终端会话有效。如需长期生效,请通过 Windows 系统环境变量面板设置。
设置 KMPKG_ROOT 告诉 kmpkg 本地安装路径,并添加到 PATH 可在终端直接运行 kmpkg 命令。
-
创建项目目录
mkdir helloworld && cd helloworld
3 - 添加依赖和项目文件
-
创建清单文件并添加
fmt依赖在项目目录下运行
kmpkg new创建清单文件 (kmpkg.json):kmpkg new --application添加
fmt依赖:kmpkg add port fmtkmpkg.json内容如下:{
"dependencies": [
"fmt"
]
}这是你的清单文件,kmpkg 会根据它安装依赖并与 CMake 集成。
默认
kmpkg-configuration.json文件定义了 baseline 约束,指定项目依赖的最小版本。尽管修改该文件不属于本教程范围,但建议将其加入版本控制以保证版本一致性。 -
创建项目文件
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)`:设置项目名称。
- `find_package(fmt CONFIG REQUIRED)`:查找 `fmt` 库,未找到会报错。
- `add_executable(HelloWorld helloworld.cpp)`:添加可执行文件。
- `target_link_libraries(HelloWorld PRIVATE fmt::fmt)`:链接 `fmt` 库,仅用于本项目。
`helloworld.cpp` 内容:
#include <fmt/core.h>
int main()
{
fmt::print("Hello World!\n");
return 0;
}
使用 `<fmt/core.h>` 调用 `fmt::print()` 输出消息。
4 - 构建并运行项目
- 运行 CMake 配置
当 CMAKE_TOOLCHAIN_FILE 指向 kmpkg 自定义工具链 时,CMake 可自动链接安装的库。可通过 CMake 预设完成。
创建以下文件:
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 设置 CMAKE_TOOLCHAIN_FILE,CMakeUserPresets.json 设置 KMPKG_ROOT。建议不要将 CMakeUserPresets.json 纳入版本控制。
配置构建:
cmake --preset=default
- 构建项目
cmake --build build
- 运行程序
- bash
- powershell
./build/HelloWorld
Hello World!
.\build\HelloWorld.exe
Hello World!