news 2026/10/5 6:36:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake CPack IFW 生成器实战指南:用 Qt Installer Framework 打造跨平台 Qt 安装器
  • 构建工具
  • 开发工具
  • CLI

【免费下载链接】CMake

Mirror 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)),其职责是:

  1. 为 QtIFW 生成config.xml、组件包(package)元数据等配置与元信息;
  2. 调用 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_SUMMARY
CPACK_IFW_PACKAGE_PUBLISHER—软件发布者(显示在 Windows 控制面板中);未指定时默认取CPACK_PACKAGE_VENDOR
CPACK_IFW_PRODUCT_URL—指向你网站上产品信息页的 URL
CPACK_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或Classic
CPACK_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 颜色码,如#88FF33)
CPACK_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_logo<ext>、图标重命名为cm_appicon/cm_winicon等),样式表亦按文件名复制后写入<StyleSheet>元素。

注意:上述图片类变量要求绝对路径,且版本门槛由 QtIFW 版本决定(如WizardStyle/StyleSheet/TitleColor需要 QtIFW 3.0+,WizardShowPageList需要 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时卸载不删除目标目录;默认ON
CPACK_IFW_PACKAGE_GROUP—用于配置根包(root package)的分组
CPACK_IFW_PACKAGE_NAME—根包名称;未指定配置分组时使用
CPACK_IFW_PACKAGE_START_MENU_DIRECTORY3.3Windows 开始菜单中产品默认程序组名称;未指定时默认取CPACK_IFW_PACKAGE_NAME
CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME3.3生成的维护工具(maintenance tool)文件名,平台相关的可执行扩展名会被自动追加;未指定时 QtIFW 默认名为maintenancetool
CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE3.3生成的维护工具配置文件文件名;未指定时 QtIFW 默认maintenancetool.ini
CPACK_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 工具默认为ON
CPACK_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 下未指定时自动追加.run;Windows 下生成.exe应用(未提供时自动追加);macOS 下生成.dmg磁盘镜像(未提供时自动追加)
CPACK_IFW_PACKAGE_PRODUCT_IMAGES3.23显示在PerformInstallationPage上的一组图片,必须是绝对路径且为 PNG 格式;需要 QtIFW 4.0.0+
CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS3.31与CPACK_IFW_PACKAGE_PRODUCT_IMAGES关联的 URL 列表;仅在PRODUCT_IMAGES已定义且两者大小一致时使用;需要 QtIFW 4.0.0+
CPACK_IFW_PACKAGE_RUN_PROGRAM3.23安装完成且用户接受勾选后执行的命令;需给出安装后的完整应用路径,通常以 QtIFW 预定义变量@TargetDir@开头;需要 QtIFW 4.0.0+
CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS3.23传给CPACK_IFW_PACKAGE_RUN_PROGRAM所指定程序的参数列表;需要 QtIFW 4.0.0+
CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION3.23安装后"运行程序"复选框旁显示的文字;若设置了RUN_PROGRAM而未提供描述,QtIFW 使用类似Run <Name> now的默认文案;需要 QtIFW 4.0.0+
CPACK_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.0+
CPACK_IFW_ARCHIVE_COMPRESSION3.23归档压缩级别,允许值:0(不压缩)、1(最快)、3(快)、5(正常)、7(最大)、9(超强)。未设置时 QtIFW 使用默认级别(通常为 5)。注意部分格式并不支持全部取值,例如zip压缩仅支持 1~7;需要 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中输出<ProductImages><ProductImage><Image>…</Image><Url>…</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_ROOT(CMake 变量,3.9+)
  • CPACK_IFW_ROOT(环境变量,3.9+)
  • QTIFWDIR(CMake 变量)
  • 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:组件将随所属分组一起被打包并安装。
  • ESSENTIAL(3.6+):在该组件更新之前,包管理器保持禁用。
  • VIRTUAL(3.8+):组件在安装器中隐藏,等价于cpack_add_component的HIDDEN选项。
  • FORCED_INSTALLATION(3.8+):组件必须总是被安装,等价于cpack_add_component的REQUIRED选项。
  • REQUIRES_ADMIN_RIGHTS(3.8+):组件需要提升权限安装。
  • NAME:为该组件创建域名式标识,默认使用原组件名。
  • DISPLAY_NAME(3.8+):改写cpack_add_component配置的原始名称。
  • DESCRIPTION(3.8+):改写cpack_add_component配置的原始描述。
  • UPDATE_TEXT(3.8+):若本次为组件更新,将追加到组件描述中。
  • VERSION:组件版本,默认使用CPACK_PACKAGE_VERSION。
  • RELEASE_DATE(3.8+):留空则自动生成。
  • SCRIPT:组件操作脚本的相对或绝对路径。
  • SORTING_PRIORITY(3.8+):组件在树中的优先级;PRIORITY为其旧名(3.8 起废弃)。
  • DEPENDS/DEPENDENCIES(3.8+):QtIFW 风格的依赖组件或组件分组标识列表;3.21 起依赖名可含连字符(需 QtIFW 3.1+)。
  • AUTO_DEPEND_ON(3.8+):该组件自动依赖的组件/分组标识列表。
  • LICENSES:<显示名>与<文件路径>成对出现的许可证文本,可指定多个。
  • DEFAULT(3.8+):取值为TRUE、FALSE或SCRIPT;FALSE表示在安装器中默认禁用该组件,SCRIPT表示运行时解析(别忘了通过SCRIPT选项提供脚本文件)。
  • USER_INTERFACES(3.7+):要加载的页面(.ui文件)路径列表。
  • TRANSLATIONS(3.8+):要加载的翻译(.qm文件)路径列表。
  • REPLACES(3.10+):要替换的组件或分组标识列表。
  • CHECKABLE(3.10+):取TRUE/FALSE;FALSE隐藏条目的复选框,适用于只需从少数几个子组件中做选择的场景。

源码佐证:命令由宏 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_repository

(3.6+)从远程更新 QtIFW 仓库,同样会追加到CPACK_IFW_REPOSITORIES_ALL:

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>])
  • URL:指向可用组件列表的地址。
  • OLD_URL:将被替换的旧列表地址。
  • NEW_URL:替换后的新列表地址。

cpack_ifw_add_package_resources

(3.7+)向安装器二进制添加额外资源,同时会把这些文件追加到CPACK_IFW_PACKAGE_RESOURCES:

cpack_ifw_add_package_resources(<file_path> <file_path> ...)

源码佐证:上述命令分别在 Modules/CPackIFW.cmake(add_repository)、Modules/CPackIFW.cmake(update_repository,仅当确实发生 ADD/REMOVE/REPLACE 时才记录仓库)与 Modules/CPackIFW.cmake(add_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函数一节。

国际化(Internationalization)

(3.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)
  • 组件与下载配置基础:CPackComponent
  • CPackIFW 模块与全部命令:Modules/CPackIFW.cmake
  • IFW 生成器核心实现:Source/CPack/IFW/cmCPackIFWGenerator.cxx、Source/CPack/IFW/cmCPackIFWInstaller.cxx
  • 官方集成测试样例:Tests/CPackIFWGenerator/CMakeLists.txt
  • QtIFW 官方资料:索引页、组件脚本、预定义变量、更新推送;QtIFW 各平台安装包可从 Qt 官网下载。
  • 构建工具
  • 开发工具
  • CLI

【免费下载链接】CMake

Mirror of CMake upstream repository

项目地址:https://gitcode.com/gh_mirrors/cm/CMake
点击查看免费下载
上一篇:终极指南:如何自定义pipes.sh终端屏保 - 16字符管道与颜色配置完全手册
下一篇:SGLang高性能推理引擎深度解析:架构设计与性能优化实战指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 6:30:20

Windows上的Docker Desktop中运行minio,已解决

首先得有Docker Desktop。这个需要去官网下载。找其他文章下载即可。打开Docker软件 找到设置&#xff1a;把引擎修改成这样{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"dns": [&q…

作者头像 李华
网站建设 2026/10/5 6:29:24

C++抽卡模拟器代码

手搓小游戏代码。#include<bits/stdc.h> #include<Windows.h> #include<conio.h> using namespace std; int b[25][12]{0}; long long k,n,jin100; string qq(int n){if(n1)return "AK-47突击步枪";else if(n2)return "M1911手枪";else…

作者头像 李华
网站建设 2026/10/5 6:28:19

广州美术考前备考的阶段执行框架与能力评估逻辑梳理

本文围绕广州地区美术高考全流程备考场景&#xff0c;结合经过多届考生验证的成熟教学实践经验&#xff0c;系统拆解考前阶段执行的核心逻辑、落地动作与能力评估标准&#xff0c;为备考规划提供结构化参考。领域体系设计目标与底层思路广州地区的美术考前备考体系&#xff0c;…

作者头像 李华
网站建设 2026/10/5 6:27:14

深圳美术考前备考全阶段目标规划与能力评估框架逻辑拆解

本文以广东省美术高考&#xff08;含深圳考区&#xff09;的统一招考要求为基准&#xff0c;拆解经过长期教研沉淀的美术考前备考全阶段目标规划与能力评估框架的设计逻辑、执行路径与适用边界&#xff0c;为深圳美术生的备考规划提供结构化参考。一、备考体系的设计目标与底层…

作者头像 李华
网站建设 2026/10/5 6:25:57

嵌入式存储芯片读取实战:OTP/EEPROM原理、协议与数据解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华