跳到主要内容

教程:从命令行安装依赖项

信息

推荐的依赖项安装方式请参阅《从清单文件安装依赖项》。

注意

部分 kmpkg 功能在经典模式下不可用。

kmpkg 有两种运行模式:经典模式和清单模式。本文介绍如何使用经典模式安装包。对于大多数用户,我们建议使用清单模式。

在经典模式下,你可以通过命令行界面将依赖项安装到公共安装目录中,该目录通常位于 %KMPKG_ROOT%/installed(其中 %KMPKG_ROOT% 是 kmpkg 的安装目录)。

前提条件

  • kmpkg
  • 终端
  • 代码编辑器
  • C++ 编译器
  • (可选)CMake 或 MSBuild

1 - 创建项目

在新文件夹中,创建名为 main.cxx 的源文件,内容如下:

#include <cxxopts.hpp>
#include <fmt/format.h>
#include <range/v3/view.hpp>

namespace view = ranges::views;

int fib(int x)
{
int a = 0, b = 1;

for (int it : view::repeat(0) | view::take(x))
{
(void)it;
int tmp = a;
a += b;
b = tmp;
}

return a;
}

int main(int argc, char **argv)
{
cxxopts::Options options("fibo", "Print the fibonacci sequence up to a value 'n'");
options.add_options()("n,value", "The value to print to", cxxopts::value<int>()->default_value("10"));

auto result = options.parse(argc, argv);
auto n = result["value"].as<int>();

for (int x : view::iota(1) | view::take(n))
{
fmt::print("fib({}) = {}\n", x, fib(x));
}
}

该代码引用了以下开源库:cxxoptsfmtrange-v3,这些库均可在 kmpkg 公共注册表(https://github.com/kumose/kmpkg)中获取。

2 - 将 kmpkg 与构建系统集成

本步骤将展示如何将 kmpkg 与 CMake 或 MSBuild 集成,使项目构建时能自动安装或还原依赖项。

若你使用其他构建系统,可跳过此步骤,直接进入下一步:安装依赖项

MSBuild

了解更多关于在 MSBuild 中使用 kmpkg 的信息

要在 MSBuild 项目中使用 kmpkg,请运行以下命令:

kmpkg integrate install

只需在首次启用 MSBuild 集成时运行 kmpkg integrate install 命令。此操作将为所有现有和未来的项目启用 MSBuild 集成。若需移除系统级 MSBuild 集成,可使用 kmpkg integrate remove 命令。

该集成方式会自动将 kmpkg 安装的包添加到以下项目属性中:包含目录库目录链接库。此外,还会创建一个后期构建操作,确保所有必需的 DLL 文件被复制到构建输出文件夹中。该功能适用于所有使用 Visual Studio 2015 或更高版本的解决方案和项目。

CMake

了解更多关于在 CMake 中使用 kmpkg 的信息

要在 CMake 项目中使用 kmpkg,需将 CMAKE_TOOLCHAIN_FILE 变量设置为 kmpkg 的 CMake 工具链文件。kmpkg 工具链文件位于 %KMPKG_ROOT%/scripts/buildsystems/kmpkg.cmake(其中 %KMPKG_ROOT% 是你的 kmpkg 安装路径)。

可通过以下任意一种方式设置工具链文件:

  • CMakePresets.json 文件中设置 CMAKE_TOOLCHAIN_FILE
  • 在 CMake 配置命令中添加参数 -DCMAKE_TOOLCHAIN_FILE=<path/to/kmpkg>/scripts/buildsystems/kmpkg.cmake
  • CMakeLists.txt 文件中首次调用 project() 之前,设置 CMAKE_TOOLCHAIN_FILE 变量。

3 - 安装依赖项

上述代码引用了开源库 cxxoptsfmtrange-v3,这些库均可在 kmpkg 公共注册表(https://github.com/kumose/kmpkg)中获取。

使用 kmpkg install 命令安装这些包:

kmpkg install cxxopts fmt range-v3
$ ./kmpkg install cxxopts fmt range-v3
Computing installation plan...
The following packages will be built and installed:
cxxopts:x64-windows -> 3.1.1
fmt:x64-windows -> 10.0.0
range-v3:x64-windows -> 0.12.0#1
* kmpkg-cmake:x64-windows -> 2023-05-04
* kmpkg-cmake-config:x64-windows -> 2022-02-06#1
Additional packages (*) will be modified to complete this operation.
(omitted)
cxxopts provides CMake targets:

# this is heuristically generated, and may not be correct
find_package(cxxopts CONFIG REQUIRED)
target_link_libraries(main PRIVATE cxxopts::cxxopts)

The package fmt provides CMake targets:

find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt)

# Or use the header-only version
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt-header-only)

range-v3 provides CMake targets:

# this is heuristically generated, and may not be correct
find_package(range-v3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE range-v3::meta range-v3::concepts range-v3::range-v3)

4 - 构建项目

注意

确保已安装包的三元组与项目配置匹配。64 位项目使用 x64-windowsx64-windows-static,32 位项目使用 x86-windowsx86-windows-static

MSBuild

启用系统级集成后,只需运行 msbuild 命令即可构建项目:

PS D:\projects\manifest-example> msbuild
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/13/2023 3:07:36 PM.

Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
(omitted)
PrepareForBuild:
(omitted)
InitializeBuildStatus:
(omitted)
ComputeStdModulesCompileInputs:
(omitted)
SetModuleDependencies:
KmpkgTripletSelection:
Using triplet "x64-windows" from "D:\kmpkg\installed\x64-windows\"
Using normalized configuration "Debug"
ClCompile:
(omitted)
Link:
(omitted)
AppLocalFromInstalled:
pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\kmpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manifest-example\x64\Debug\manifest-example.exe"
"D:\kmpkg\installed\x64-windows\debug\bin" "x64\Debug\manifest-example.tlog\manifest-example.write.1u.tlog" "x64\Debug\kmpkg.applocal.log"
D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
Deleting file "x64\Debug\manifest-example.tlog\unsuccessfulbuild".
Touching "x64\Debug\manifest-example.tlog\manifest-example.lastbuildstate".
Done Building Project "D:\projects\manifest-example\manifest-example.vcxproj" (default targets).

Done Building Project "D:\projects\manifest-example\manifest-example.sln" (default targets).

Build succeeded.

Visual Studio

解决方案资源管理器中右键单击项目,选择生成即可构建项目:

Build started...
1>------ Build started: Project: manifest-example, Configuration: Debug x64 ------
1>main.cxx
1>manifest-example.vcxproj -> D:\projects\manifest-example\x64\Debug\manifest-example.exe
1>Done building project "manifest-example.vcxproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 3:16 PM and took 18.608 seconds ==========

CMake

1 - 创建 CMakeLists.txt 文件

在项目文件夹中添加以下 CMakeLists.txt 文件:

CMakeLists.txt:

CMakeLists.txt
cmake_minimum_required(VERSION 3.15)

project(fibonacci CXX)

find_package(fmt CONFIG REQUIRED)
find_package(range-v3 CONFIG REQUIRED)
find_package(cxxopts CONFIG REQUIRED)

set(CMAKE_CXX_STANDARD 17)

add_executable(fibo main.cxx)

target_link_libraries(fibo
PRIVATE
fmt::fmt
range-v3::range-v3
cxxopts::cxxopts)

2 - 配置 CMake 项目

运行以下命令(将 %KMPKG_ROOT% 替换为你的 kmpkg 安装路径):

cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%KMPKG_ROOT%\scripts\buildsystems\kmpkg.cmake

示例输出:

PS D:\projects\manifest-example> cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=D:/kmpkg/scripts/buildsystems/kmpkg.cmake
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.25921.
-- The CXX compiler identification is MSVC 19.37.32814.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.37.32814/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/projects/manifest-example/build

3 - 构建 CMake 项目

运行以下命令构建项目:

cmake --build build

示例输出:

PS D:\projects\manifest-example> cmake --build build
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework

Checking Build System
Building Custom Rule D:/projects/manifest-example/CMakeLists.txt
main.cxx
fibo.vcxproj -> D:\projects\manifest-example\build\Debug\fibo.exe
Building Custom Rule D:/projects/manifest-example/CMakeLists.txt

后续步骤

本教程中,你通过 kmpkg 命令行界面为简单项目安装了依赖项。

你可尝试完成以下后续操作: