Skip to main content
Version: 1.1.1

安装树布局

本文介绍了将构建输出复制到安装目录时 kmpkg 使用的布局约定。

本文介绍了 kmpkg 安装时使用的布局约定目录。安装目录保存着每个包安装的文件。 端口作者应确保他们的包遵循所描述的约定在本文中。

经典模式下,安装目录为 位于 $KMPKG_ROOT/installed 中(其中 $KMPKG_ROOT 是您的 kmpkg 安装路径)。在 清单模式 中,每个 清单文件有一个对应的kmpkg_installed目录。的位置 可以使用以下命令更改安装目录--x-install-root 选项。 无论运行模式如何,安装目录的布局保持不变。

安装目录是在第一次安装包时创建的, 如果您没有看到安装目录,请尝试 首先安装一些软件包

安装目录的根级别包含:

  • 一个kmpkg目录,用于跟踪已安装的软件包和文件
  • 每个 三元组 的目录。每个三元组目录 包含每个包安装的文件。

三元组目录

每个软件包安装的输出都包含在一个特定于三元组的目录中。 例如,为x64-windows三元组安装的软件包位于 installed/x64-windows 目录。

每个三元组目录内的子目录的布局是相同的:

info

某些软件包可能会生成与此处描述的约定不匹配的文件。 移植作者应根据以下情况确定生成文件的最终位置 每个文件的用途。

子目录文件类型
bin发布 .dll.pdb 文件
debug/bin调试 .dll.pdb 文件
debug/lib调试 .lib.so.dylib.a 文件
debug/lib/manual-link可手动链接的调试 .lib.so.dylib.a 文件
debug/plugins/<group>运行时加载调试 .dll 文件
debug/lib/pkgconfig调试 pkgconfig 文件 (.pc)
include头文件(.h.hpp.hxx
lib发布 .lib.so.dylib.a 文件
lib/manual-link可手动链接的发布 .lib.so.dylib.a 文件
lib/pkgconfigPkgconfig 文件 (.pc)
plugins/<group>运行时加载发布 .dll 文件
share/<port>其他与配置无关的文件
share/<port>/copyright包的许可证文本
share/<port>/usage生成系统集成说明文件
share/<port>/kmpkg-port-config.cmake端口定义的 CMake 函数和变量
share/<lowercase-package>/<package>Config.cmakefind_package(package) 的 CMake 集成文件
share/<cmakepackagename>/kmpkg-cmake-wrapper.cmakeCCMake find_package(<cmakepackagename>) 替代
share/pkgconfig与配置无关的 pkgconfig 文件 (.pc)
tools/<port>可执行工具

bindebug/bin 目录

在 Windows 上,这些目录包含用于发布和调试配置的 DLL 和 PDB 文件 分别。端口生成的任何可执行文件都应移动到 tools/<port> 目录。

include

包含头文件(.h.hpp.hxx)。该目录下的布局 应反映包头文件的预期用途。例如,contoso 打算使用#include <contoso/contoso.h>的库应该提供 头文件include/contoso/contoso.h

kmpkg 禁止在根目录中安装一些保留的头文件名include 目录,例如:err.huser.htime.h 等。提供禁止的头文件名的库应该放置其头文件 include/<port> 目录中的文件。如果图书馆打算更换系统头文件,它应该设置KMPKG_POLICY_ALLOW_RESTRICTED_HEADERSportfile.cmake中的策略。

libdebug/lib 目录

包含静态库、导入库(在 Windows 上)和共享库(在非 Windows 上)。

包含必须手动链接的库。

自动链接时可能导致问题的文件必须放置在lib/manual-link 文件夹而不是 lib 目录。例如,如果一个 库旨在定义程序的main()函数。

lib/pkgconfigdebug/lib/pkgconfigshare/pkgconfig 目录

包含 pkgconfig 集成文件 (.pc)。图书馆不应提供同时包含依赖于配置和独立于配置的文件。 例如:不要安装lib/pkgconfig/contoso.pcshare/pkgconfig/contoso.pc

plugins/<group> and debug/plugins/<group>

包含在运行时通过使用来加载的共享库应用程序。

share/<port>

包含每个端口安装的各种文件。例如,SPDX 文件、脚本等。

kmpkg 希望 ports 提供包含许可证的“版权”文件已安装软件包的信息。请参阅维护者指南 了解更多信息。

share/<port>/usage

包含将库集成到项目中的说明的文本文件。 请参阅提供包使用文档的指南 了解更多信息。

share/<lowercase-package>/<package>Config.cmake, share/<package>/<package>-config.cmake

CMake 集成文件应放置在“share”文件夹中并尊重 CMake 的规则 find_package(package) 在“配置”模式下。

例如,如果端口期望提供find_package(MyPackage REQUIRED),则它 必须提供 share/mypackage/MyPackageConfig.cmakeshare/mypackage/MyPackage-config.cmake

如果包提供 CMake 集成文件,则kmpkg_cmake_config_fixup() 应调用辅助函数来修复任何不可重定位的路径并合并构建配置。

tools/<port>

[!IMPORTANT]

warning

kmpkg 首先是一个 C++ 库依赖管理器。端口作者应该 在决定在安装输出中包含工具时要慎重。例如: 当不需要调试工具时,考虑仅安装发布可执行文件。

当需要可执行文件时,应提供发布和调试可执行文件 供运行时使用。

包含由端口生成的可执行工具。强烈推荐, 但不是必需的,每个安装的可执行文件都进入一个子目录 与生成它的端口名称相匹配。例如,contoso port 可能会将ContosoGenerator.exe安装到tools/contoso/ContosoGenerator.exe

某些端口要求将其可执行文件放入bin子目录中,其中 在这种情况下,推荐的模式是tools/<port>/bin