多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

CMake CPackIFW 模块完全指南:用 CPack IFW 生成器打造 Qt Installer Framework 安装包

CMake CPackIFW 模块完全指南:用 CPack IFW 生成器打造 Qt Installer Framework 安装包 构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载本指南以 CMake 官方仓库中的CPackIFW模块Modules/CPackIFW.cmake 内嵌文档及其配套的 CPack IFW 生成器文档 为核心系统讲解如何定位 Qt Installer FrameworkQtIFW命令行工具、通过cpack_ifw_*系列命令精细控制组件、组件组与远程仓库的配置以及全部CPACK_IFW_*生成器变量的含义与用法。读完本文你将能够从零搭建一套包含组件树、依赖关系、在线更新仓库与多语言描述的专业 Qt 跨平台安装程序并理解这些配置在 CPack 源码中的真实落地路径。一、CPackIFW 模块与 IFW 生成器概述Qt Installer FrameworkQtIFW是 Qt 官方提供的安装程序制作工具集支持 Linux、Microsoft Windows 与 macOS 三大平台。CPack 的IFW生成器负责生成 QtIFW 所需的配置与元信息并驱动 QtIFW 的binarycreator、repogen等工具产出最终的安装器。CPackIFW模块自 CMake 3.1 起提供承担两项职责定位 QtIFW 命令行工具通过find_program在常见路径下查找binarycreator、repogen、installerbase、devtool、archivegen等可执行文件定义配置命令提供cpack_ifw_configure_component、cpack_ifw_configure_component_group、cpack_ifw_add_repository、cpack_ifw_update_repository、cpack_ifw_add_package_resources五个命令用于控制 IFW 生成器的行为。在 CMake 项目中使用只需一行include(CPackIFW)注意模块内部会在需要时自动引入CPackComponent源码中通过if(NOT CPackComponent_CMake_INCLUDED) include(CPackComponent) endif()保证依赖因此cpack_add_component、cpack_add_component_group、cpack_configure_downloads等命令也可直接使用。二、QtIFW 工具的自动查找与版本探测2.1 查找路径与优先级模块加载时会先构造一份候选路径列表_CPack_IFW_PATHS其来源依次为见 Modules/CPackIFW.cmakeCMake 变量CPACK_IFW_ROOT3.9 起、QTIFWDIR、QTDIR同名环境变量平台默认路径Windows 下为$ENV{HOMEDRIVE}/Qt与C:/Qt其他平台为$ENV{HOME}/Qt与/opt/Qt。随后在这些根目录下拼接多级子目录作为PATH_SUFFIXES包括bin、Tools/QtInstallerFramework/版本/bin、QtIFW/bin、QtIFW-版本/bin覆盖 QtIFW 1.3.0 至 4.11.0 的绝大部分历史版本目录布局。最终依次查找可执行文件缓存变量find_program 结果说明binarycreatorCPACK_IFW_BINARYCREATOR_EXECUTABLE安装器编译器IFW 生成器的必需工具repogenCPACK_IFW_REPOGEN_EXECUTABLE在线仓库生成器可选installerbaseCPACK_IFW_INSTALLERBASE_EXECUTABLE安装器可执行基础用于探测框架版本devtoolCPACK_IFW_DEVTOOL_EXECUTABLE开发者工具QtIFW 第二分支起出现archivegenCPACK_IFW_ARCHIVEGEN_EXECUTABLE组件数据归档工具3.19 起记录这些结果均为缓存变量mark_as_advanced用户可手动指定覆盖。从生成器源码看cmCPackIFWGenerator.cxx 在运行时强制要求存在binarycreator缺失会直接报错“Cannot find QtIFW compiler binarycreator”而repogen仅在使用在线仓库功能时才必需。2.2 框架版本探测模块会自动探测 QtIFW 版本并写入CPACK_IFW_FRAMEWORK_VERSION。探测顺序为见 Modules/CPackIFW.cmake依次调用installerbase --version与installerbase --framework-version对输出执行[0-9](\.[0-9])*正则提取版本号超时时间由缓存变量CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT默认 1 秒控制若均失败尝试从installerbase可执行文件的路径字符串中提取版本号若仍失败警告用户手动设置CPACK_IFW_FRAMEWORK_VERSION_FORCED。CPACK_IFW_FRAMEWORK_VERSION_FORCED是一个高级缓存变量用于强制指定所用 QtIFW 工具版本例如工具位于非标准路径且无法自报版本时。开启CPACK_IFW_VERBOSE可在 configure 阶段看到“Found QtIFW x.y.z (forced) version”之类的诊断信息。三、组件配置cpack_ifw_configure_componentcpack_ifw_configure_component用于为 CPack 组件设置 IFW 生成器专属参数必须在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 起重写原始描述文本。UPDATE_TEXT3.8 起当本次安装是对组件的更新时附加到组件描述中的提示文本。VERSION组件版本默认取CPACK_PACKAGE_VERSION。RELEASE_DATE3.8 起发布日期留空则自动生成。SCRIPT该组件的操作脚本installscript.qs 等的相对或绝对路径。模块内部会用get_filename_component(... ABSOLUTE)解析为绝对路径若文件不存在会输出警告并忽略该值见_cpack_ifw_resolve_script宏。SORTING_PRIORITY3.8 起组件在组件树中的排序优先级。PRIORITYSORTING_PRIORITY的旧名称自 3.8 起已弃用。DEPENDS/DEPENDENCIES3.8 起以 QtIFW 风格标识符列出的依赖组件或组件组。自 3.21 起依赖名可以包含连字符-这要求 QtIFW 3.1 或更高版本。AUTO_DEPEND_ON3.8 起本组件自动依赖的组件/组件组标识符列表。LICENSES成对给出显示名称 文件路径的许可证文本可指定多个许可证。模块内部会将其中的路径逐对解析为绝对路径见_cpack_ifw_resolve_licenses宏。DEFAULT3.8 起可取TRUE、FALSE、SCRIPT。设为FALSE表示安装器中默认不勾选设为SCRIPT表示运行时由脚本决定此时需配合SCRIPT选项提供脚本文件。USER_INTERFACES3.7 起要加载的.ui页面文件列表。TRANSLATIONS3.8 起要加载的.qm翻译文件列表。REPLACES3.10 起本组件要取代的组件/组件组标识符列表。CHECKABLE3.10 起可取TRUE、FALSE。设为FALSE可隐藏某项的复选框适用于“只允许选择少量子组件”的场景。实现原理宏内部使用cmake_parse_arguments解析参数生成形如CPACK_IFW_COMPONENT_大写组件名_参数名的变量并通过cpack_append_option_set_command、cpack_append_string_variable_set_command、cpack_append_list_variable_set_command将这些设置追加写入 CPack 输出配置文件CPACK_OUTPUT_CONFIG_FILE供 IFW 生成器阶段读取见 Modules/CPackIFW.cmake。四、组件组配置cpack_ifw_configure_component_groupcpack_ifw_configure_component_group与组件配置几乎一一对应针对的是cpack_add_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组件组在安装器中隐藏但对根组件root component设置无效FORCED_INSTALLATION该组必须始终被安装REQUIRES_ADMIN_RIGHTS整组安装需要提升权限DEFAULT设为TRUE可在安装器中预选该组但仅对没有可见子组件的组生效设为SCRIPT则运行时由脚本解析。其余NAME、DISPLAY_NAME、DESCRIPTION、UPDATE_TEXT、VERSION、RELEASE_DATE、SCRIPT、SORTING_PRIORITY、DEPENDS、AUTO_DEPEND_ON、LICENSES、USER_INTERFACES、TRANSLATIONS、REPLACES、CHECKABLE的语义与组件版本完全一致版本默认值同样是CPACK_PACKAGE_VERSION。其实现同样基于cmake_parse_arguments生成CPACK_IFW_COMPONENT_GROUP_大写组名_参数名变量并写入输出配置见 Modules/CPackIFW.cmake。五、远程仓库cpack_ifw_add_repository 与 cpack_ifw_update_repository5.1 添加仓库cpack_ifw_add_repository用于向安装器中添加 QtIFW 远程仓库在线组件来源cpack_ifw_add_repository(reponame [DISABLED] URL url [USERNAME username] [PASSWORD password] [DISPLAY_NAME display_name])DISABLED若设置仓库默认处于禁用状态用户需在安装器中手动启用URL指向可用组件列表的地址USERNAME受保护仓库使用的用户名PASSWORD仓库密码DISPLAY_NAME界面中替代 URL 展示的字符串。该命令会同时把reponame追加到变量CPACK_IFW_REPOSITORIES_ALL生成器据此汇总所有远程仓库。5.2 更新仓库cpack_ifw_update_repository3.6 起支持三种变更操作语法互斥cpack_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])ADD URL url新增仓库地址REMOVE URL url移除仓库地址REPLACE OLD_URL old_url NEW_URL new_url将旧地址替换为新地址USERNAME/PASSWORD/DISPLAY_NAME与cpack_ifw_add_repository相同。只有当确实执行了ADD、REMOVE或REPLACE之一时仓库名才会被追加到CPACK_IFW_REPOSITORIES_ALL见 Modules/CPackIFW.cmake。5.3 在线安装Online Installer机制默认情况下IFW 生成器产出离线安装器——所有打包文件完整内嵌于安装器可执行文件。而在线安装器则从远程服务器按需下载部分或全部组件。三种控制方式的优先级与分工cpack_add_component的DOWNLOADED选项指定某组件需要下载cpack_configure_downloads的ALL选项指定所有组件都下载CPACK_IFW_DOWNLOAD_ALL变量设为ON时强制所有组件走下载流程未设置时行为由是否以ALL调用过cpack_configure_downloads决定。存在在线组件时CPack 会将其写入归档文件其下载 URL 的暴露方式由CPackComponent模块的cpack_configure_downloads说明详见 Modules/CPackComponent.cmake。六、额外资源打包cpack_ifw_add_package_resourcescpack_ifw_add_package_resources3.7 起将附加资源.qrc资源文件打进安装器二进制cpack_ifw_add_package_resources(file_path file_path ...)该命令会将所有文件路径解析为绝对路径并过滤掉不存在的文件不存在的文件会输出警告并跳过见_cpack_ifw_resolve_file_list宏将结果追加到变量CPACK_IFW_PACKAGE_RESOURCES。如果直接在变量中手动指定资源注意必须使用绝对路径且任意两个资源文件不能同名。使用本命令则可以放心传入相对路径由模块自动解析。七、CPACK_IFW_* 生成器变量详解除命令外IFW 生成器还支持大量CPACK_IFW_*变量按类别整理如下。7.1 调试与包级信息变量引入版本说明CPACK_IFW_VERBOSE3.3设为ON开启额外调试输出默认OFFCPACK_IFW_PACKAGE_TITLE—标题栏显示的安装器名称默认取CPACK_PACKAGE_DESCRIPTION_SUMMARYCPACK_IFW_PACKAGE_PUBLISHER—软件发布者Windows 控制面板显示默认取CPACK_PACKAGE_VENDORCPACK_IFW_PRODUCT_URL—产品信息网页 URLCPACK_IFW_PACKAGE_GROUP—用于配置根包root package的组CPACK_IFW_PACKAGE_NAME—未指定配置组时使用的根包名称图标与外观相关变量除特别说明外均须为绝对路径变量引入版本说明CPACK_IFW_PACKAGE_ICON—自定义安装器图标macOS 用.icnsWindows 用.ico其他平台忽略CPACK_IFW_PACKAGE_WINDOW_ICON—安装器窗口图标PNG 格式CPACK_IFW_PACKAGE_LOGO—Logo 图片PNG用作QWizard::LogoPixmapCPACK_IFW_PACKAGE_WATERMARK3.8水印图片PNG用作QWizard::WatermarkPixmapCPACK_IFW_PACKAGE_BANNER3.8横幅图片PNG用作QWizard::BannerPixmapCPACK_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样式表文件路径绝对路径7.2 目标目录与路径约束CPACK_IFW_TARGET_DIRECTORY默认安装目录。若设置了CPACK_PACKAGE_INSTALL_DIRECTORY默认值为ApplicationsDir/${CPACK_PACKAGE_INSTALL_DIRECTORY}否则默认RootDir/usr/local。其中...形式的预定义变量由 QtIFW 脚本引擎展开。CPACK_IFW_ADMIN_TARGET_DIRECTORY以管理员权限安装时的默认目标目录同样支持预定义变量。CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR3.11 起设为OFF表示卸载时不删除目标目录默认ON。CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS3.3 起设为ON允许安装路径包含非 ASCII 字符仅 QtIFW 2.0 支持更早版本始终允许。CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH3.3 起设为OFF禁止安装路径包含空格QtIFW 2.0 以下工具默认允许。7.3 维护工具与命令行CPACK_IFW_PACKAGE_START_MENU_DIRECTORY3.3 起Windows 开始菜单默认程序组名默认取CPACK_IFW_PACKAGE_NAME。CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME3.3 起生成的维护工具文件名平台可执行扩展名会自动追加不设置时 QtIFW 默认名为maintenancetool。CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE3.3 起维护工具配置文件文件名默认maintenancetool.ini。CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE3.23 起设为ON禁用命令行接口功能默认OFF仅 QtIFW 4.0 生效。CPACK_IFW_PACKAGE_CONTROL_SCRIPT3.3 起自定义安装器控制脚本文件名。7.4 产物格式与归档变量引入版本说明CPACK_IFW_PACKAGE_FILE_EXTENSION3.10目标二进制扩展名Linux 未指定时自动追加.runWindows 自动追加.exemacOS 生成 DMG 并自动追加.dmgCPACK_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 默认约5Normal注意zip格式仅支持 1–7需 QtIFW 4.2.07.5 组件解析与依赖CPACK_IFW_RESOLVE_DUPLICATE_NAMES安装带组的组件时解析重名问题。CPACK_IFW_PACKAGES_DIRECTORIES附加的预制备包目录用于解析依赖组件。CPACK_IFW_REPOSITORIES_DIRECTORIES3.10 起附加的预制备仓库目录用于解析与重新打包依赖组件需 QtIFW 3.1。7.6 在线安装增强特性QtIFW 4.0CPACK_IFW_PACKAGE_PRODUCT_IMAGES3.23 起显示在PerformInstallationPage上的图片列表须为 PNG 绝对路径需 QtIFW 4.0.0。CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS3.31 起与产品图片一一关联的 URL 列表仅当CPACK_IFW_PACKAGE_PRODUCT_IMAGES已定义且两者长度一致时使用需 QtIFW 4.0.0。CPACK_IFW_PACKAGE_RUN_PROGRAM3.23 起安装完成后用户勾选执行的命令需提供安装后的完整路径通常以预定义变量TargetDir开头需 QtIFW 4.0.0。CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS3.23 起传递给上述程序的参数列表需 QtIFW 4.0.0。CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION3.23 起勾选框旁的说明文本未提供时 QtIFW 使用类似Run Name now的默认文案需 QtIFW 4.0.0。CPACK_IFW_PACKAGE_SIGNING_IDENTITY3.23 起macOS 上用于签名生成的 app bundle 的代码签名身份其他平台忽略。CPACK_IFW_DOWNLOAD_ALL设为ON时所有组件均下载详见“在线安装机制”一节。7.7 工具路径与框架版本缓存变量CPACK_IFW_FRAMEWORK_VERSION3.3 起由模块自动探测。工具路径缓存变量为CPACK_IFW_ARCHIVEGEN_EXECUTABLE3.19 起、CPACK_IFW_BINARYCREATOR_EXECUTABLE、CPACK_IFW_REPOGEN_EXECUTABLE、CPACK_IFW_INSTALLERBASE_EXECUTABLE、CPACK_IFW_DEVTOOL_EXECUTABLE。7.8 查找提示变量CPACK_IFW_ROOTCMake 变量与环境变量均自 3.9 起与QTIFWDIR可补充指定 QtIFW 安装根目录优先级高于平台默认路径。注意路径末尾不要带bin例如应写D:\DevTools\QtIFW2.0.5而非D:\DevTools\QtIFW2.0.5\bin。八、国际化InternationalizationQtIFW 安装器本身内置多语言支持但组件/组件组的描述文本并不会自动翻译。自 3.9 起DISPLAY_NAME、DESCRIPTION等命令参数以及部分变量支持通过 CMake 脚本进行国际化。一个可本地化的变量或参数可以包含一个默认值后跟若干“语言环境名 本地化值”对set(LOCALIZABLE_VARIABLE Default value en English value en_US American value en_GB Great Britain value )CPack 在生成安装器配置时会依据目标语言环境自动选取对应的本地化文本从而实现面向多语言用户的安装器描述。九、源码级落地从 CMake 配置到安装器9.1 生成器运行流程在 Source/CPack/IFW 目录中IFW 生成器被拆分为若干类cmCPackIFWGenerator入口与工具校验、cmCPackIFWInstaller安装器级配置负责GeneratePackageFiles、cmCPackIFWPackage组件/组配置、cmCPackIFWRepository仓库配置、cmCPackIFWCommon公共逻辑。生成流程大致为cmCPackIFWGenerator::GeneratePackage首先调用Installer.GeneratePackageFiles()把 CMake 侧收集的CPACK_IFW_*变量与cpack_ifw_*命令产物渲染为 QtIFW 的config/config.xml及各组件目录校验binarycreator存在必需有在线组件时校验repogen可选调用 QtIFW 工具产出安装器可执行文件。9.2 官方测试用例仓库提供了完整的集成测试 Tests/CPackIFWGenerator/CMakeLists.txt可作为最佳实践范本。其核心做法包括定义hello可执行目标并安装到各平台对应目录特意覆盖 Windows 保留名场景组件名CON、Console、EndsWithDot.验证 IFW 生成器对这些边界的处理设置CPACK_IFW_PRODUCT_URL、按平台设置CPACK_IFW_PACKAGE_ICONWindows 用install.ico其他平台用BundleIcon.icns、CPACK_IFW_PACKAGE_WINDOW_ICON配置CPACK_IFW_PACKAGE_PRODUCT_IMAGES与CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS两组等长列表最后依次include(CPack)与include(CPackIFW)。配套的 RunCPackVerifyResult.cmake 则通过执行cpack -C config随后解析生成的_CPack_Packages/*/IFW/*/config/config.xml断言其中必须恰好包含 2 个ProductImage、2 个Image、2 个Url并精确匹配ApplicationIcon.png、SplashScreen.png及其 URL——这直接印证了“产品图片与 URL 列表按序一一对应写入 config.xml”的生成行为。十、综合实战示例综合上述内容一个典型的 IFW 安装器配置如下# 定位 QtIFW按需设置路径不含 bin set(CPACK_IFW_ROOT D:/DevTools/QtIFW4.6.0) # 包级信息 set(CPACK_PACKAGE_NAME MyApp) set(CPACK_PACKAGE_VERSION 1.2.3) set(CPACK_IFW_PACKAGE_TITLE My Application Installer) set(CPACK_IFW_PACKAGE_PUBLISHER My Company) set(CPACK_IFW_PRODUCT_URL https://example.com/myapp) set(CPACK_IFW_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/res/install.ico) set(CPACK_IFW_PACKAGE_WIZARD_STYLE Modern) set(CPACK_IFW_PACKAGE_TARGET_DIRECTORY ApplicationsDir/MyApp) # 组件与组件组 cpack_add_component(runtime REQUIRED) cpack_add_component(docs) cpack_add_component_group(extras) cpack_ifw_configure_component(runtime FORCED_INSTALLATION DISPLAY_NAME Runtime Libraries DESCRIPTION Required runtime libraries for MyApp ) cpack_ifw_configure_component(docs DISPLAY_NAME Documentation en Documentation zh_CN 文档 DESCRIPTION PDF manuals en PDF manuals zh_CN PDF 手册 VERSION 1.0.0 LICENSES Docs License ${PROJECT_SOURCE_DIR}/licenses/docs.txt ) cpack_ifw_configure_component_group(extras SORTING_PRIORITY 100 DEPENDS runtime ) # 远程仓库在线安装 cpack_ifw_add_repository(updates URL https://updates.example.com/repo DISPLAY_NAME MyApp Updates ) # 附加资源 cpack_ifw_add_package_resources(${PROJECT_SOURCE_DIR}/res/extra.qrc) set(CPACK_GENERATOR IFW) include(CPack) include(CPackIFW)之后执行cpack -G IFW或直接运行cpack并按CPACK_GENERATOR配置即可在构建目录下生成跨平台 Qt 安装器。若工具路径探测失败可依据第 2.2 节的机制检查CPACK_IFW_FRAMEWORK_VERSION_FORCED与CPACK_IFW_VERBOSE输出定位问题。十一、小结CPackIFW 模块打通了 CMake 组件模型与 Qt Installer Framework 之间的配置鸿沟cpack_ifw_configure_component/cpack_ifw_configure_component_group负责组件树、依赖、许可与交互细节cpack_ifw_add_repository/cpack_ifw_update_repository支撑在线更新体系cpack_ifw_add_package_resources注入自定义资源大量CPACK_IFW_*变量则提供从外观、路径约束到归档压缩的细粒度控制。配合官方测试 Tests/CPackIFWGenerator 与 Source/CPack/IFW 的实现你可以据此构建出满足生产级发布要求的 Linux、Windows、macOS 三平台安装程序。赞分享构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载相关推荐CMake CPack IFW 生成器实战指南用 Qt Installer Framework 打造跨平台 Qt 安装器CMake CPack IFW 生成器实战指南用 Qt Installer Framework 打造跨平台 Qt 安装器 CPack 的 IFW 生成器负责为构建工具开发工具CLICMake CPack NSIS 生成器完全指南用 CPack 构建 Windows 图形化安装包CMake CPack NSIS 生成器完全指南用 CPack 构建 Windows 图形化安装包 导读 CPack 的 NSISNullsoft Scri构建工具开发工具CLICMake打包工具CPack完全指南生成DEB/RPM/MSI安装包全流程CMake打包工具CPack完全指南生成DEB/RPM/MSI安装包全流程 你是否还在为跨平台软件打包而烦恼从Linux的DEB/RPM到Windows的M构建工具开发工具CLI上一篇kOps 滚动更新Rolling Update实战指南实例选择、更新顺序与 maxSurge/maxUnavailable 策略配置下一篇Biome Markdown 格式化器段落内联节点处理链接文本星号转义与 Prettier 快照测试解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表