端口策略参考
端口策略可在 portfile.cmake 中设置为 disabled(默认值)或 enabled。示例:
set(KMPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled)
KMPKG_POLICY_ALLOW_DEBUG_INCLUDE
禁用 kmpkg 对 debug/include 目录的构建后检查(端口不应创建该目录)。
KMPKG_POLICY_ALLOW_DEBUG_SHARE
禁用 kmpkg 对 debug/share 目录的构建后检查(端口不应创建该目录)。
KMPKG_POLICY_ALLOW_DLLS_IN_LIB
禁用 kmpkg 对“DLL 安装到 lib 目录而非 bin 目录”的构建后检查。
KMPKG_POLICY_ALLOW_EMPTY_FOLDERS
禁用 kmpkg 对端口创建空目录的构建后检查。空目录不被视为端口安装内容的语义部分,且无法被多个二进制缓存后端识别。
KMPKG_POLICY_ALLOW_EXES_IN_BIN
禁用 kmpkg 对 bin 目录中存在可执行文件(.exe)的构建后检查(该目录不应存在可执行文件)。构建工具应移至 tools 目录,可使用 kmpkg_copy_tools 函数。
KMPKG_POLICY_ALLOW_KERNEL32_FROM_XBOX
禁用 kmpkg 的构建后检查:当端口目标为 Xbox 时,禁止链接 kernel32。链接 kernel32 的二进制文件无法在 Xbox 上运行(Xbox 无 kernel32.dll)。
KMPKG_POLICY_ALLOW_OBSOLETE_MSVCRT
禁用 kmpkg 对旧版 C 运行时库的构建后检查。
KMPKG_POLICY_ALLOW_RESTRICTED_HEADERS
禁用 kmpkg 的构建后检查:禁止端口安装操作系统和标准库预留的头文件。
KMPKG_POLICY_CMAKE_HELPER_PORT
标记该端口用于为其他端口提供 CMake 函数,依赖该端口的其他端口应加载其设置的 kmpkg_port_config.cmake 文件。
KMPKG_POLICY_DLLS_IN_STATIC_LIBRARY
禁用 kmpkg 的构建后检查:当三元组要求静态构建时,禁止端口生成 DLL。
KMPKG_POLICY_DLLS_WITHOUT_EXPORTS
禁用 kmpkg 对“无导出符号的 DLL”的构建后检查。无导出符号的 DLL 通常对调用者无用。在 Windows 上提供良好的动态链接体验,要求库定义 DLL 接口。另请参考维护者指南中的 不要添加 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS。
KMPKG_POLICY_DLLS_WITHOUT_LIBS
禁用 kmpkg 对“生成 DLL 但未生成导入库”的构建后检查。此类 DLL 使用难度较高,因为链接器无法识别其导出的函数。
KMPKG_POLICY_EMPTY_INCLUDE_FOLDER
禁用 kmpkg 对空 include 目录的构建后检查。空 include 目录通常意味着头文件安装位置错误。
KMPKG_POLICY_EMPTY_PACKAGE
禁用所有构建后检查,并阻止该端口被包含在部分类型的 kmpkg export 导出包中。
KMPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES
禁用 kmpkg 对“Release 和 Debug 二进制文件数量不匹配”的构建后检查。
KMPKG_POLICY_ONLY_RELEASE_CRT
表明该端口仅打算安装使用 Release 版 C 运行时库的组件,链接 Debug 版 C 运行时库视为错误。另请参考 KMPKG_POLICY_SKIP_CRT_LINKAGE_CHECK。
KMPKG_POLICY_SKIP_ABSOLUTE_PATHS_CHECK
禁用 kmpkg 对“安装文件中嵌入绝对路径”的构建后检查。绝对路径通常会破坏二进制缓存,因为不同 kmpkg 实例中的安装目录根路径可能不同。
KMPKG_POLICY_SKIP_ALL_POST_BUILD_CHECKS
禁用 kmpkg 的所有构建后检查。
KMPKG_POLICY_SKIP_APPCONTAINER_CHECK
禁用 kmpkg 的构建后检查:即使三元组目标为 UWP,也不检查 appcontainer 标志。
KMPKG_POLICY_SKIP_ARCHITECTURE_CHECK
禁用 kmpkg 的构建后检查:不验证端口生成的二进制文件是否匹配三元组要求的架构。
KMPKG_POLICY_SKIP_COPYRIGHT_CHECK
禁用 kmpkg 的构建后检查:不验证端口是否安装了包含许可证信息的版权文件(copyright)。
KMPKG_POLICY_SKIP_CRT_LINKAGE_CHECK
完全禁用 kmpkg 对“C 运行时库链接正确性”的构建后检查。
KMPKG_POLICY_SKIP_DUMPBIN_CHECKS
该策略无实际作用。旧版 kmpkg 中,其用于兼容未提供 dumpbin 工具的环境(如 MinGW),禁用依赖该工具的构建后检查。当前版 kmpkg 已直接实现 dumpbin 的功能,无需调用外部工具。
KMPKG_POLICY_SKIP_LIB_CMAKE_MERGE_CHECK
禁用 kmpkg 的构建后检查:不验证 Release 和 Debug 配置的 CMake 配置文件是否合并为单个配置。该问题通常是由于忘记调用 kmpkg_cmake_config_fixup 导致的。
KMPKG_POLICY_SKIP_MISPLACED_REGULAR_FILES_CHECK
禁用 kmpkg 的构建后检查:不验证常规文件是否安装在非预期位置(这些位置应仅包含目录)。
KMPKG_POLICY_SKIP_PKGCONFIG_CHECK
禁用 kmpkg 的构建后检查:不验证 pkgconfig(.pc)文件是否安装在正确位置。安装位置错误的 .pc 文件无法被 pkgconf 或 pkg-config 识别,或可能错误声明架构无关性。
KMPKG_POLICY_SKIP_USAGE_INSTALL_CHECK
禁用 kmpkg 的构建后检查:不验证是否遗漏安装使用说明文件(usage)。当端口包含名为 usage 的文件,但未在 ${CURRENT_PACKAGES_DIR}/share/${PORT}/ 目录下安装该文件时,会触发此检查(表明可能遗漏了使用说明的安装)。