Skip to main content
Version: nightly 🚧

帮助程序端口

了解如何创建脚本端口以重用多个 kmpkg 端口文件中的函数。

帮助器端口,也称为脚本端口,将其他端口的函数公开给在构建过程中消耗。例如,kmpkg-cmake 端口定义 kmpkg_cmake_configure() 函数供其他端口使用。按包装将通用脚本集成到辅助端口中,维护变得更加简化 可以在一个位置进行更新。此外,辅助端口可以是版本化并依赖于使用与常规端口相同的机制。

它们如何工作?

帮助器端口是通过kmpkg-port-config.cmake扩展实现的 机制。

在执行端口之前,kmpkg 将导入任何 kmpkg-port-config.cmake 文件 已由端口的直接依赖项导出 被执行。

如果辅助端口依赖于不同的辅助端口,则必须显式导入其依赖项的 kmpkg-port-config.cmake 文件。助手到助手端口 依赖项不应标记为 host依赖项,这确保了 脚本可以依赖于同一安装目录中的另一个脚本。

依赖于辅助端口的端口应将依赖项标记为 host依赖项

帮助程序端口必须始终将其kmpkg-port-config.cmake文件安装在安装树 中的 share/${PORT} 子目录。

示例:编写一个简单的辅助端口

1 - 创建定义辅助函数的 CMake 文件。

my-helper/my_helper_function.cmake

include_guard(GLOBAL)

function(my_helper_function)
message(STATUS "my_helper_function() was called")
my_other_helper_function()
endfunction()

文件顶部的include_guard(GLOBAL)可防止重新定义 当文件被多次包含时此功能。

以下几行声明了一个名为my_helper_function的函数,该函数显示 一条消息并调用定义在 a 中的 my_other_helper_function 不同的帮助端口。

2 - 创建辅助端口的 portile.cmake 文件

my-helper/portfile.cmake

set(KMPKG_POLICY_HELPER_PORT enabled)

file(INSTALL
"${CMAKE_CURRENT_LIST_DIR}/kmpkg-port-config.cmake"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")

file(INSTALL "${KMPKG_ROOT_DIR}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)

通过启用KMPKG_POLICY_HELPER_PORT策略,kmpkg 启用构建后检查特别适用于辅助端口。具体来说, 检查kmpkg-port-config.cmake是否安装在正确的路径中,并且include目录中没有安装任何文件。

接下来的几行安装所需的kmpkg-port-config.cmakecopyright文件位于正确的位置(share/${PORT})。

3 - 创建帮助程序端口的kmpkg.json文件

my-helper/kmpkg.json

{
"name": "my-helper",
"version-date": "2024-03-20",
"description": "Provide my_helper_function()",
"license": "MIT",
"dependencies": [
{ "name": "my-other-helper" }
]
}

我们建议使用 version-date 作为 版本控制方案 用于帮助程序端口。

此示例中的 dependencies 包含对另一个帮助器端口的引用名为my-other-helper。故意不将依赖项标记为主机 依赖关系,因为这是帮助程序到帮助程序端口的依赖关系。

4 - 创建帮助程序端口的kmpkg-port-config.cmake文件

my-helper/kmpkg-port-config.cmake

include_guard(GLOBAL)

include("${CMAKE_CURRENT_LIST_DIR}/../my-other-helper/kmpkg-port-config.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/my_helper_function.cmake")

kmpkg-port-config.cmake 文件由三行组成,第一行是全局包含保护,防止文件被多次包含。

第二行包含 my-other-helper/kmpkg-port-config.cmake 以使 my-other-helper中的函数可用于依赖于my-helper的端口他们不必将“我的其他帮助者”包含在他们的直接列表中 依赖关系。

最后,包含my_helper_functionmy_helper_function.cmake文件 定义已包含在内。

5 - 在清单中使用my-helper

my-helper 的任何消费者只需要包含对my-helper 本身,不需要依赖于 my-other-helper 。消费的 清单应将依赖项标记为主机依赖项。

my-port/kmpkg.json

{
"name": "my-port",
"version": "1.0.0",
"dependencies": [
{
"name": "my-helper",
"host": true
}
]
}

这使得my_helper_functionmy-port/portfile.cmake中可用。

my-port/portfile.cmake

my_helper_function()