帮助程序端口
了解如何创建脚本端口以重用多个 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.cmake和copyright文件位于正确的位置(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_function的my_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_function在my-port/portfile.cmake中可用。
my-port/portfile.cmake
my_helper_function()