为kmpkg打包归档文件示例:zlib 1.2.13
本文介绍如何从上游源码发行归档包为kmpkg打包zlib库。
通过create命令初始化打包
1. 准备基础信息
首先,找到库源码的公开可访问归档文件(支持Zip、gzip、bzip格式),优先选择官方源/官方镜像,避免使用非官方镜像。
以zlib为例,其官网提供的http://zlib.net/zlib-1.2.13.tar.gz 是合适的源码包地址。
其次,确定合适的包名:需为ASCII字符、全小写,且符合库的“通用名称”;若该库已在其他包管理器中打包,优先沿用相同名称。
由于zlib已被官方打包为zlib,本示例使用zlib2作为包名。
最后,若服务器上的归档文件名不够直观(如GitHub提交/分支压缩包),需自定义规范名称(格式:<包名>-<版本>.zip)。
zlib-1.2.13.tar.gz 命名规范,无需修改。
2. 执行create命令初始化
将上述信息传入create命令,该命令会自动下载源码,并在ports/<包名>目录下初始化打包所需文件:
PS D:\src\kmpkg> .\kmpkg create zlib2 http://zlib.net/zlib-1.2.13.tar.gz zlib-1.2.13.tar.gz
-- Downloading http://zlib.net/zlib-1.2.13.tar.gz -> zlib-1.2.13.tar.gz...
-- Generated portfile: D:\src\kmpkg\ports\zlib2\portfile.cmake
-- Generated manifest: D:\src\kmpkg\ports\zlib2\kmpkg.json
-- To launch an editor for these new files, run
-- .\kmpkg edit zlib2
创建清单文件
除了自动生成的ports/<包名>/portfile.cmake,还需创建ports/<包名>/kmpkg.json文件,用于描述包的元数据。
为zlib2创建ports/zlib2/kmpkg.json,内容如下:
{
"name": "zlib2",
"version": "1.2.13",
"description": "一款轻量高效且低侵入性的压缩库(zlib)"
}
调整自动生成的portfile文件
自动生成的portfile.cmake通常需要适配修改才能正确打包,我们先尝试构建以定位问题:
PS D:\src\kmpkg> .\kmpkg install zlib2
Computing installation plan...
The following packages will be built and installed:
zlib2[core]:x64-uwp
Starting package 1/1: zlib2:x64-uwp
Building package zlib2[core]:x64-uwp...
-- Using cached C:/src/kmpkg/downloads/zlib-1.2.13.tar.gz
-- Cleaning sources at C:/src/kmpkg/buildtrees/zlib2/src/1.2.13-deec42f53b.clean. Pass --editable to kmpkg to reuse sources.
-- Extracting source C:/src/kmpkg/downloads/zlib-1.2.13.tar.gz
-- Applying patch cmake_dont_build_more_than_needed.patch
-- Using source at C:/src/kmpkg/buildtrees/zlib2/src/1.2.13-deec42f53b.clean
-- Configuring x64-uwp
-- Building x64-uwp-dbg
-- Building x64-uwp-rel
-- Installing: C:/src/kmpkg/packages/zlib2_x64-uwp/share/zlib2/copyright
-- Performing post-build validation
Include files should not be duplicated into the /debug/include directory. If this cannot be disabled in the project cmake, use
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
/debug/share should not exist. Please reorganize any important files, then use
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
The software license must be available at ${CURRENT_PACKAGES_DIR}/share/zlib2/copyright
Found 3 error(s). Please correct the portfile:
D:\src\kmpkg\ports\zlib2\portfile.cmake
修复portfile问题
需根据错误提示和日志逐步优化portfile,针对zlib的核心调整点:
- 单独复制LICENSE文件到包的
copyright目录; - 禁止构建/安装可执行文件和重复的头文件;
- 安装后清理debug目录下的冗余文件(如静态库、share目录)。
推荐的示例portfile文件
kmpkg官方仓库的ports/目录 提供了丰富的参考示例,涵盖多种构建类型的库:
- 仅头文件库
- rapidjson
- range-v3
- 基于MSBuild的库
- chakracore
- 非CMake(自定义构建系统)的库
- openssl
- ffmpeg