跳到主要内容

使用 CMake 安装和使用包

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

前提条件

title="Windows C++ 开发的 MSVC 要求"

对于 Windows 用户,C++ 开发必须使用 Visual Studio 提供的 MSVC(Microsoft Visual C++ 编译器)。

1 - 设置 kmpkg

  1. 克隆仓库

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

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

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

  2. 运行 bootstrap 脚本

    进入 kmpkg 目录并执行 bootstrap 脚本:

cd kmpkg && bootstrap-kmpkg.bat

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

至此,kmpkg 已安装完成,可直接使用。

2 - 设置项目

  1. 配置 KMPKG_ROOT 环境变量。
export KMPKG_ROOT=/path/to/kmpkg
export PATH=$KMPKG_ROOT:$PATH

使用 export 设置的环境变量仅对当前 shell 会话有效。如需在所有会话中生效,请将命令添加到 shell 配置文件(如 ~/.bashrc~/.zshrc)中。

设置 KMPKG_ROOT 告诉 kmpkg 本地安装路径,并添加到 PATH 可在终端直接运行 kmpkg 命令。

  1. 创建项目目录

    mkdir helloworld && cd helloworld

3 - 添加依赖和项目文件

  1. 创建清单文件并添加 fmt 依赖

    在项目目录下运行 kmpkg new 创建清单文件 (kmpkg.json):

    kmpkg new --application

    添加 fmt 依赖:

    kmpkg add port fmt

    kmpkg.json 内容如下:

    {
    "dependencies": [
    "fmt"
    ]
    }

    这是你的清单文件,kmpkg 会根据它安装依赖并与 CMake 集成。

    默认 kmpkg-configuration.json 文件定义了 baseline 约束,指定项目依赖的最小版本。尽管修改该文件不属于本教程范围,但建议将其加入版本控制以保证版本一致性。

  2. 创建项目文件

    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)`:设置项目名称。
- `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 - 构建并运行项目

  1. 运行 CMake 配置

CMAKE_TOOLCHAIN_FILE 指向 kmpkg 自定义工具链 时,CMake 可自动链接安装的库。可通过 CMake 预设完成。

创建以下文件:

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 设置 CMAKE_TOOLCHAIN_FILECMakeUserPresets.json 设置 KMPKG_ROOT。建议不要将 CMakeUserPresets.json 纳入版本控制。

配置构建:

cmake --preset=default
  1. 构建项目
cmake --build build
  1. 运行程序
./build/HelloWorld

Hello World!

后续步骤