ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CMake CPack IFW 生成器实战指南:用 Qt Installer Framework 打造跨平台 Qt 安装器

CMake CPack IFW 生成器实战指南:用 Qt Installer Framework 打造跨平台 Qt 安装器 构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载CPack 的IFW生成器负责为 Qt Installer Framework 为骨架结合仓库内 Modules/CPackIFW.cmake 与 Source/CPack/IFW 下的源码实现系统讲解全部配置变量、工具查找机制、组件/仓库定制命令、在线安装器与国际化方案读完即可在你的 CMake 项目中一键产出专业级 Qt 安装程序。概述IFW 生成器做了什么IFW生成器自 CMake 3.1 起提供见 Help/cpack_gen/ifw.rst是 CPack 众多生成器之一详见 cpack-generators(7)其职责是为 QtIFW 生成config.xml、组件包package元数据等配置与元信息调用 QtIFW 自带的binarycreator、repogen、archivegen、installerbase、devtool等命令行工具最终生成安装器可执行文件。QtIFW 本身为 Qt 支持的平台Linux、Microsoft Windows、macOS提供安装器制作工具集因此使用本生成器前必须预先安装 QtIFW。CPackIFW模块Modules/CPackIFW.cmake负责定位 QtIFW 命令行工具的位置并定义若干命令来控制该生成器的行为详见后文查找 QtIFW 的提示与CPackIFW 模块命令两节。行为控制变量全解析以下变量用于改变 CPackIFW生成器的行为按文档分类逐组说明。调试变量引入版本含义CPACK_IFW_VERBOSE3.3设为ON开启额外的调试输出默认OFF从 Modules/CPackIFW.cmake 的实现可以看到当该变量开启且成功探测到 QtIFW 版本时会输出Found QtIFW 版本 version之类的状态信息若无法探测版本则会发出警告并提示手动设置CPACK_IFW_FRAMEWORK_VERSION_FORCED。安装器外观与元信息Package变量引入版本含义与默认值CPACK_IFW_PACKAGE_TITLE—标题栏显示的安装器名称未指定时默认取CPACK_PACKAGE_DESCRIPTION_SUMMARYCPACK_IFW_PACKAGE_PUBLISHER—软件发布者显示在 Windows 控制面板中未指定时默认取CPACK_PACKAGE_VENDORCPACK_IFW_PRODUCT_URL—指向你网站上产品信息页的 URLCPACK_IFW_PACKAGE_ICON—自定义安装器图标文件名必须为绝对路径macOS 应为.icns、Windows 应为.ico其他平台忽略CPACK_IFW_PACKAGE_WINDOW_ICON—安装器应用窗口图标PNG 格式必须为绝对路径CPACK_IFW_PACKAGE_LOGO—Logo 图片PNG 格式用作QWizard::LogoPixmap必须为绝对路径CPACK_IFW_PACKAGE_WATERMARK3.8水印图片PNG用作QWizard::WatermarkPixmap必须为绝对路径CPACK_IFW_PACKAGE_BANNER3.8横幅图片PNG用作QWizard::BannerPixmap必须为绝对路径CPACK_IFW_PACKAGE_BACKGROUND3.8背景图片PNG用作QWizard::BackgroundPixmap仅MacStyle使用必须为绝对路径CPACK_IFW_PACKAGE_WIZARD_STYLE3.8向导风格Modern、Mac、Aero或ClassicCPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH3.8向导默认宽度像素设置了 banner 图片将覆盖该值CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT3.8向导默认高度像素设置了 watermark 图片将覆盖该值CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST3.20设为OFF隐藏向导左侧的安装页列表默认ON但仅在 QtIFW 4.0 及以上有效CPACK_IFW_PACKAGE_TITLE_COLOR3.8标题与副标题颜色HTML 颜色码如#88FF33CPACK_IFW_PACKAGE_STYLE_SHEET3.15样式表文件名必须为绝对路径源码佐证在 Source/CPack/IFW/cmCPackIFWInstaller.cxx 的ConfigureFromOptions()中CPACK_IFW_PACKAGE_ICON、WINDOW_ICON、LOGO、WATERMARK、BANNER、BACKGROUND、STYLE_SHEET等选项均会先经cmSystemTools::FileExists()校验文件是否存在不存在的文件会被跳过并输出 will be skipped 警告WIZARD_STYLE若取值不是Modern/Aero/Mac/Classic会打印未知取值警告WIZARD_SHOW_PAGE_LIST在 QtIFW 低于 4.0 时会被忽略并给出明确提示。GenerateInstallerFile()cmCPackIFWInstaller.cxx随后把这些设置写入安装器构建目录下的config/config.xml其中图片类资源会被复制到config/目录Logo 重命名为cm_logoext、图标重命名为cm_appicon/cm_winicon等样式表亦按文件名复制后写入StyleSheet元素。注意上述图片类变量要求绝对路径且版本门槛由 QtIFW 版本决定如WizardStyle/StyleSheet/TitleColor需要 QtIFW 3.0WizardShowPageList需要 4.0源码中以IsVersionLess(1.4)、IsVersionLess(2.0)、IsVersionLess(3.0)、IsVersionLess(4.0)分段控制各属性何时写入 config.xml。安装目标与卸载行为Target变量引入版本含义与默认值CPACK_IFW_TARGET_DIRECTORY—默认安装目标目录。若设置了CPACK_PACKAGE_INSTALL_DIRECTORY默认值为ApplicationsDir/${CPACK_PACKAGE_INSTALL_DIRECTORY}两者都未设置时默认RootDir/usr/local。其中...形式的预定义变量由 QtIFW 脚本引擎展开见 QtIFW scripting 文档CPACK_IFW_ADMIN_TARGET_DIRECTORY—需要管理员权限时的默认安装目标目录同样可使用预定义变量CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR3.11设为OFF时卸载不删除目标目录默认ONCPACK_IFW_PACKAGE_GROUP—用于配置根包root package的分组CPACK_IFW_PACKAGE_NAME—根包名称未指定配置分组时使用CPACK_IFW_PACKAGE_START_MENU_DIRECTORY3.3Windows 开始菜单中产品默认程序组名称未指定时默认取CPACK_IFW_PACKAGE_NAMECPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME3.3生成的维护工具maintenance tool文件名平台相关的可执行扩展名会被自动追加未指定时 QtIFW 默认名为maintenancetoolCPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE3.3生成的维护工具配置文件文件名未指定时 QtIFW 默认maintenancetool.iniCPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS3.3设为ON允许安装路径含非 ASCII 字符仅 QtIFW 2.0 及以上支持更老的 QtIFW 始终允许CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH3.3设为OFF禁止安装路径含空格对低于 2.0 的 QtIFW 工具默认为ONCPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE3.23设为ON禁用命令行接口特性默认OFF仅在 QtIFW 4.0 及以上有效CPACK_IFW_PACKAGE_CONTROL_SCRIPT3.3自定义安装器控制脚本文件名CPACK_IFW_PACKAGE_RESOURCES3.7额外资源.qrc文件列表加入安装器二进制应使用绝对路径且任意两个资源文件不能同名。可用cpack_ifw_add_package_resources命令解析相对路径CPACK_IFW_PACKAGE_FILE_EXTENSION3.10目标二进制扩展名。Linux 下未指定时自动追加.runWindows 下生成.exe应用未提供时自动追加macOS 下生成.dmg磁盘镜像未提供时自动追加CPACK_IFW_PACKAGE_PRODUCT_IMAGES3.23显示在PerformInstallationPage上的一组图片必须是绝对路径且为 PNG 格式需要 QtIFW 4.0.0CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS3.31与CPACK_IFW_PACKAGE_PRODUCT_IMAGES关联的 URL 列表仅在PRODUCT_IMAGES已定义且两者大小一致时使用需要 QtIFW 4.0.0CPACK_IFW_PACKAGE_RUN_PROGRAM3.23安装完成且用户接受勾选后执行的命令需给出安装后的完整应用路径通常以 QtIFW 预定义变量TargetDir开头需要 QtIFW 4.0.0CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS3.23传给CPACK_IFW_PACKAGE_RUN_PROGRAM所指定程序的参数列表需要 QtIFW 4.0.0CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION3.23安装后运行程序复选框旁显示的文字若设置了RUN_PROGRAM而未提供描述QtIFW 使用类似Run Name now的默认文案需要 QtIFW 4.0.0CPACK_IFW_PACKAGE_SIGNING_IDENTITY3.23指定用于给生成的 app bundle 签名的代码签名身份仅 macOS 可用其他平台忽略CPACK_IFW_ARCHIVE_FORMAT3.23打包新组件数据归档时使用的格式省略时默认7z。支持7z、zip、tar.gz、tar.bz2、tar.xz。若 QtIFW 工具未以 libarchive 支持构建则只支持7z需要 QtIFW 4.2.0CPACK_IFW_ARCHIVE_COMPRESSION3.23归档压缩级别允许值0不压缩、1最快、3快、5正常、7最大、9超强。未设置时 QtIFW 使用默认级别通常为 5。注意部分格式并不支持全部取值例如zip压缩仅支持 17需要 QtIFW 4.2.0源码佐证TargetDir的默认值推导逻辑在 cmCPackIFWInstaller.cxx与文档所述完全一致AllowNonAsciiCharacters/AllowSpaceInPath在 QtIFW 低于 2.0 时由生成器写死为true见 cmCPackIFWInstaller.cxx。ArchiveFormat/ArchiveCompression在生成器初始化时被读取cmCPackIFWGenerator.cxx。ProductImages与ProductImageUrls的长度不一致时会触发警告并丢弃 URL 列表cmCPackIFWInstaller.cxx并在config.xml中输出ProductImagesProductImageImage…/ImageUrl…/Url/ProductImage…/ProductImages结构cmCPackIFWInstaller.cxx。RunProgram相关选项仅在 QtIFW 4.0 写入RunProgram/RunProgramArguments/RunProgramDescription元素cmCPackIFWInstaller.cxx。组件Components变量引入版本含义CPACK_IFW_RESOLVE_DUPLICATE_NAMES—使用分组安装组件时解析重复名称CPACK_IFW_PACKAGES_DIRECTORIES—额外的已备好包package目录用于解析依赖组件CPACK_IFW_REPOSITORIES_DIRECTORIES3.10额外的已备好仓库目录用于解析并重新打包依赖组件需要 QtIFW 3.1源码佐证ResolveDuplicateNames、PkgsDirsVector、RepoDirsVector在 cmCPackIFWGenerator.cxx 中从对应变量展开并保存供后续组件依赖解析与打包流程使用。查找 QtIFW 的提示与工具相关变量一般来说CPackIFW生成器会自动查找 QtIFW 工具。以下变量按优先级从高到低可用于扩充find_program默认搜索范围CPACK_IFW_ROOTCMake 变量3.9CPACK_IFW_ROOT环境变量3.9QTIFWDIRCMake 变量QTIFWDIR环境变量注意指定的路径末尾不应包含bin例如D:\DevTools\QtIFW2.0.5。源码佐证实际查找逻辑在 Modules/CPackIFW.cmake 中。模块依次收集CPACK_IFW_ROOT、QTIFWDIR、QTDIR含各自的环境变量形式作为基础路径Windows 下额外加入$ENV{HOMEDRIVE}/Qt与C:/Qt其他平台加入$ENV{HOME}/Qt与/opt/Qt随后按Tools/QtInstallerFramework/、QtIFW、QtIFW-前缀与内置的 QtIFW 版本号列表从 1.3 一直到 4.11.0组合出路径/前缀版本/bin形式的PATH_SUFFIXES再分别以NAMES为binarycreator、repogen、installerbase、devtool、archivegen调用find_program。以下变量保存CPackIFW模块探测到的 QtIFW 命令行工具位置均为缓存变量必要时可自行配置变量引入版本对应工具CPACK_IFW_ARCHIVEGEN_EXECUTABLE3.19archivegen路径CPACK_IFW_BINARYCREATOR_EXECUTABLE—binarycreator路径CPACK_IFW_REPOGEN_EXECUTABLE—repogen路径CPACK_IFW_INSTALLERBASE_EXECUTABLE—installerbase路径CPACK_IFW_DEVTOOL_EXECUTABLE—devtool路径CPACK_IFW_FRAMEWORK_VERSION3.3将要使用的 QtIFW 工具版本由CPackIFW模块设置源码佐证CPACK_IFW_FRAMEWORK_VERSION的探测分三步优先执行installerbase --version或--framework-version带 1 秒超时解析版本号其次从可执行文件路径中正则提取版本号最后可手动用缓存变量CPACK_IFW_FRAMEWORK_VERSION_FORCED强制指定Modules/CPackIFW.cmake。若binarycreator找不到生成器会直接报错退出若配置了远程仓库但找不到repogen同样报错cmCPackIFWGenerator.cxx。CPackIFW 模块命令在 CMakeLists.txt 中执行include(CPackIFW)Modules/CPackIFW.cmake后可得到如下命令用于精细控制安装器组件、分组、仓库与资源cpack_ifw_configure_component配置单个组件应在cpack_add_component之后调用cpack_ifw_configure_component(compname [COMMON] [ESSENTIAL] [VIRTUAL] [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] [NAME name] [DISPLAY_NAME display_name] # 支持国际化 [DESCRIPTION description] # 支持国际化 [UPDATE_TEXT update_text] [VERSION version] [RELEASE_DATE release_date] [SCRIPT script] [PRIORITY|SORTING_PRIORITY sorting_priority] # PRIORITY 已废弃 [DEPENDS|DEPENDENCIES com_id ...] [AUTO_DEPEND_ON comp_id ...] [LICENSES display_name file_path ...] [DEFAULT value] [USER_INTERFACES file_path file_path ...] [TRANSLATIONS file_path file_path ...] [REPLACES comp_id ...] [CHECKABLE value])参数含义COMMON组件将随所属分组一起被打包并安装。ESSENTIAL3.6在该组件更新之前包管理器保持禁用。VIRTUAL3.8组件在安装器中隐藏等价于cpack_add_component的HIDDEN选项。FORCED_INSTALLATION3.8组件必须总是被安装等价于cpack_add_component的REQUIRED选项。REQUIRES_ADMIN_RIGHTS3.8组件需要提升权限安装。NAME为该组件创建域名式标识默认使用原组件名。DISPLAY_NAME3.8改写cpack_add_component配置的原始名称。DESCRIPTION3.8改写cpack_add_component配置的原始描述。UPDATE_TEXT3.8若本次为组件更新将追加到组件描述中。VERSION组件版本默认使用CPACK_PACKAGE_VERSION。RELEASE_DATE3.8留空则自动生成。SCRIPT组件操作脚本的相对或绝对路径。SORTING_PRIORITY3.8组件在树中的优先级PRIORITY为其旧名3.8 起废弃。DEPENDS/DEPENDENCIES3.8QtIFW 风格的依赖组件或组件分组标识列表3.21 起依赖名可含连字符需 QtIFW 3.1。AUTO_DEPEND_ON3.8该组件自动依赖的组件/分组标识列表。LICENSES显示名与文件路径成对出现的许可证文本可指定多个。DEFAULT3.8取值为TRUE、FALSE或SCRIPTFALSE表示在安装器中默认禁用该组件SCRIPT表示运行时解析别忘了通过SCRIPT选项提供脚本文件。USER_INTERFACES3.7要加载的页面.ui文件路径列表。TRANSLATIONS3.8要加载的翻译.qm文件路径列表。REPLACES3.10要替换的组件或分组标识列表。CHECKABLE3.10取TRUE/FALSEFALSE隐藏条目的复选框适用于只需从少数几个子组件中做选择的场景。源码佐证命令由宏 cpack_ifw_configure_component 实现内部用cmake_parse_arguments把参数整理为CPACK_IFW_COMPONENT_大写组件名_*系列变量并对SCRIPT、LICENSES、USER_INTERFACES、TRANSLATIONS执行绝对路径解析与存在性检查缺失脚本/文件会输出警告最终追加到 CPack 输出配置文件中。cpack_ifw_configure_component_group配置组件分组应在cpack_add_component_group之后调用参数与上一条命令基本一致cpack_ifw_configure_component_group(groupname [VIRTUAL] [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] [NAME name] [DISPLAY_NAME display_name] # 支持国际化 [DESCRIPTION description] # 支持国际化 [UPDATE_TEXT update_text] [VERSION version] [RELEASE_DATE release_date] [SCRIPT script] [PRIORITY|SORTING_PRIORITY sorting_priority] [DEPENDS|DEPENDENCIES com_id ...] [AUTO_DEPEND_ON comp_id ...] [LICENSES display_name file_path ...] [DEFAULT value] [USER_INTERFACES file_path file_path ...] [TRANSLATIONS file_path file_path ...] [REPLACES comp_id ...] [CHECKABLE value])与组件版本的区别点VIRTUAL设置后分组在安装器中隐藏注意对根组件设置无效FORCED_INSTALLATION使分组必须总是被安装DEFAULT设为TRUE可预选分组仅对没有可见子组件的分组生效或SCRIPT运行时解析其余参数语义同组件命令。cpack_ifw_add_repository向二进制安装器添加 QtIFW 远程仓库该命令同时会把reponame追加到CPACK_IFW_REPOSITORIES_ALL变量cpack_ifw_add_repository(reponame [DISABLED] URL url [USERNAME username] [PASSWORD password] [DISPLAY_NAME display_name])DISABLED仓库默认禁用。URL指向可用组件列表的地址。USERNAME访问受保护仓库的用户名。PASSWORD访问受保护仓库的密码。DISPLAY_NAME代替 URL 显示的字符串。cpack_ifw_update_repository3.6从远程更新 QtIFW 仓库同样会追加到CPACK_IFW_REPOSITORIES_ALLcpack_ifw_update_repository(reponame [[ADD|REMOVE] URL url]| [REPLACE OLD_URL old_url NEW_URL new_url]] [USERNAME username] [PASSWORD password] [DISPLAY_NAME display_name])URL指向可用组件列表的地址。OLD_URL将被替换的旧列表地址。NEW_URL替换后的新列表地址。cpack_ifw_add_package_resources3.7向安装器二进制添加额外资源同时会把这些文件追加到CPACK_IFW_PACKAGE_RESOURCEScpack_ifw_add_package_resources(file_path file_path ...)源码佐证上述命令分别在 Modules/CPackIFW.cmakeadd_repository、Modules/CPackIFW.cmakeupdate_repository仅当确实发生 ADD/REMOVE/REPLACE 时才记录仓库与 Modules/CPackIFW.cmakeadd_package_resources会做文件存在性校验中实现。其他设置在线安装器Online installer默认情况下该生成器产出的是离线安装器所有打包文件完整包含在安装器可执行文件中。与之相对在线安装器会从远程服务器下载部分或全部组件。cpack_add_component命令的DOWNLOADED选项可指定某个组件需要被下载或使用cpack_configure_downloads命令的ALL选项指定所有组件都要被下载cpack_ifw_add_repository命令与CPACK_IFW_DOWNLOAD_ALL变量提供更精细的配置。CPACK_IFW_DOWNLOAD_ALL说明若为ON所有组件都会被下载若未设置则行为取决于cpack_configure_downloads是否以ALL选项被调用。源码侧cmCPackIFWGenerator.cxx 依次读取CPACK_IFW_DOWNLOAD_ALL→CPACK_DOWNLOAD_ALL决定OnlineOnly标志。仓库变量CPACK_IFW_REPOSITORIES_ALL的默认值由 CPack 计算得出包含所有通过cpack_ifw_add_repository添加或cpack_ifw_update_repository更新的仓库。存在在线组件时CPack 会将其写入归档文件如何让这些文件通过下载 URL 可访问详见 CPackComponent 模块帮助页中cpack_configure_downloads函数一节。国际化Internationalization3.9部分变量与命令参数支持通过 CMake 脚本实现国际化这是可选特性。QtIFW 工具创建的安装器内建多语言支持许多短语已本地化为多种语言但这不适用于你自定义的组件与分组描述。因此本地化组件/分组的描述对安装器用户十分有用。一个可国际化的变量或参数可包含一个默认值其后跟随一组语言区域名 本地化值的成对参数set(LOCALIZABLE_VARIABLE Default value en English value en_US American value en_GB Great Britain value )一个可直接复用的最小配置示例参照仓库自带的集成测试 Tests/CPackIFWGenerator/CMakeLists.txt一个最小可用的 IFW 打包配置大致如下cmake_minimum_required(VERSION 3.16) project(CPackIFWGenerator) add_executable(hello main.cpp) install(TARGETS hello ARCHIVE DESTINATION . RUNTIME DESTINATION . LIBRARY DESTINATION . BUNDLE DESTINATION .) # 产品信息页 URL set(CPACK_IFW_PRODUCT_URL https://example.org/) # Windows 用 .ico其他平台macOS用 .icns if(WIN32) set(CPACK_IFW_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/install.ico) else() set(CPACK_IFW_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/BundleIcon.icns) endif() set(CPACK_IFW_PACKAGE_WINDOW_ICON ${PROJECT_SOURCE_DIR}/install.ico) # 安装页展示图及其关联 URL需要 QtIFW 4.0 set(CPACK_IFW_PACKAGE_PRODUCT_IMAGES ${PROJECT_SOURCE_DIR}/ApplicationIcon.png ${PROJECT_SOURCE_DIR}/SplashScreen.png ) set(CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS https://www.ApplicationIcon.org https://www.SplashScreen.org ) set(CPACK_GENERATOR IFW) include(CPack) include(CPackIFW)按上述配置执行cpack生成器会先通过 Modules/CPackIFW.cmake 定位 QtIFW 工具链随后在构建目录中生成config/config.xml与组件包元数据最后调用binarycreator产出安装器可执行文件Linux 为.run、Windows 为.exe、macOS 为.dmg。若要组合组件与分组再结合cpack_add_component/cpack_add_component_group与cpack_ifw_configure_component/cpack_ifw_configure_component_group即可。延伸阅读CPack 生成器总览cpack-generators(7)组件与下载配置基础CPackComponentCPackIFW 模块与全部命令Modules/CPackIFW.cmakeIFW 生成器核心实现Source/CPack/IFW/cmCPackIFWGenerator.cxx、Source/CPack/IFW/cmCPackIFWInstaller.cxx官方集成测试样例Tests/CPackIFWGenerator/CMakeLists.txtQtIFW 官方资料索引页、组件脚本、预定义变量、更新推送QtIFW 各平台安装包可从 Qt 官网下载。赞分享构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载相关推荐GNU Radio 跨平台构建与安装包生成全指南依赖管理、CMake/CPack 与 Windows/macOS 打包实战GNU Radio 跨平台构建与安装包生成全指南依赖管理、CMake/CPack 与 Windows/macOS 打包实战 本文围绕 GNU Radio 仓库通信科研CMake-Cookbook项目实战使用CPack生成多平台软件包CMake Cookbook项目实战使用CPack生成多平台软件包 前言 在现代软件开发中高效的软件打包和分发流程是项目成功的关键因素之一。CMake作为主文档教程CPack Archive 生成器完全指南用 CMake 打遍 7z/tar/zip 全格式安装包与源码包CPack Archive 生成器完全指南用 CMake 打遍 7z/tar/zip 全格式安装包与源码包 CPack 的 Archive 生成器Archi构建工具开发工具CLI上一篇终极指南如何自定义pipes.sh终端屏保 - 16字符管道与颜色配置完全手册下一篇SGLang高性能推理引擎深度解析架构设计与性能优化实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表