【Qt】QtIFW 安装包制作总结 -如何创建多组件的安装器

一、引言

​ 对于QtIFW进行多组件安装包的制作,需要编写安装脚本,故需要知道如何编写安装脚本以及一些语法参数。详见《QtIFW 安装脚本与语法》

​ 本文主题:如何创建多组件的安装包

二、详细过程记录
(2-1)多组件的目录层级和依赖关系

​ 对于多组件的安装包,其package目录下将会出现如下的目录层级结构:

  -packages
      - com.vendor.root		//根组件
          - data
          - meta
      - com.vendor.root.component1	//依赖于根组件的component1组件
          - data
          - meta
      - com.vendor.root.component1.subcomponent1 //依赖于component1组件的subcomponent1组件
          - data
          - meta
      - com.vendor.root.component2	//依赖于根组件的component2组件
          - data
          - meta

​ 组件可以依赖于一个或多个实组件或虚组件。依赖项是通过使用组件标识符和(可选)组件版本来定义的。使用破折号(-)分隔版本号和标识符。

​ 可以用比较操作符(=,>,<(<), >=或<=(<=))来指示包的版本号与所需的版本号进行比较,并且必须等于、大于、小于、大于或等于或小于依赖项中指定的版本号。如果没有给出比较操作符,则默认为=。

(2-2)描述组件的package.xml文件的编写

​ 一个示例:

 <?xml version="1.0"?>
  <Package>
      <DisplayName>QtGui</DisplayName>
      <Description>Qt gui libraries</Description>
      <Description xml:lang="de_de">Qt GUI Bibliotheken</Description>
      <Version>1.2.3</Version>
      <ReleaseDate>2009-04-23</ReleaseDate>
      <Name>com.vendor.root.component2</Name>
      <Dependencies>com.vendor.root.component1</Dependencies>
      <Virtual>false</Virtual>
      <Licenses>
          <License name="License Agreement" file="license.txt" />
      </Licenses>
      <Script>installscript.qs</Script>
      <UserInterfaces>
          <UserInterface>specialpage.ui</UserInterface>
          <UserInterface>errorpage.ui</UserInterface>
      </UserInterfaces>
      <Translations>
          <Translation>sv_se.qm</Translation>
          <Translation>de_de.qm</Translation>
      </Translations>
      <DownloadableArchives>component2.7z, component2a.7z</DownloadableArchives>
      <AutoDependOn>com.vendor.root.component3</AutoDependOn>
      <SortingPriority>123</SortingPriority>
      <UpdateText>This changed compared to the last release</UpdateText>
      <Default>false</Default>
      <ForcedInstallation>false</ForcedInstallation>
      <Essential>false</Essential>
      <Replaces>com.vendor.root.component2old</Replaces>
  </Package>

​ xml文件元素表:

Element描述
DisplayName可读的组件名称。将xml:lang属性设置为正确的区域设置,将组件名称的翻译作为附加DisplayName标记的值指定。【必需的】
Description对组件的可读描述。必需的。翻译可以类似于DisplayName标签指定。如果没有找到与区域设置匹配的本地化,并且存在未翻译的版本,则将使用该版本。否则将不会显示该区域设置的Description。用户可点击的外部链接,例如组件的主页,可以通过指定URL地址包括在组件描述中:{external-link}=‘https://www.qt.io/’。URL必须是有效的,并且包含所需资源的完整路径。
Version组件的版本号,格式如下:[0-9]+((.
ReleaseDate该组件版本发布的日期。【必需的】
Name此组件的类域标识。【必需的】
Dependencies该组件所依赖的组件标识符的逗号分隔列表。还可以指定版本号,用破折号(-)分隔。你可以用比较操作符(=,>,<,>=或<=)作为版本号的前缀。记住,必须使用字符引用“<”来转义左尖括号(使用“<”而不是“<”和“<=”而不是“<=”)。
AutoDependOn此组件具有自动依赖关系的组件的标识符的逗号分隔列表。当且仅当满足所有指定的依赖项时,才安装组件。如果组件自动依赖于其他组件,则在组件树中的组件旁边将不可见复选框。选择将自动执行。如果该组件之前没有安装过,则只有当此列表中的所有组件也被选择安装时,才会选择该组件进行安装。如果组件已经安装,它将被选择。
Virtual设置为true将组件从安装程序中隐藏。注意,在根组件上设置此参数是不起作用的。
SortingPriority树中组件的优先级。树的优先级从最高到最低,最高优先级在顶端。
Licenses安装用户接受的许可协议列表。要添加几个许可证,请添加几个子元素,每个子元素指定许可证名称和文件。license文件支持ASCII和UTF8两种文件格式。如果该组件列出了翻译,安装程序也将查找翻译许可证。这些文件需要与原始许可文件具有相同的名称,但需要添加地区标识符。
Script正在加载的脚本的文件名。可选的
UserInterfaces要加载的页面列表。要添加多个页面,请添加几个子元素,每个子元素指定页面的文件名。可选的
Translations要加载的翻译文件列表。要添加几个语言变体,请指定几个子元素,每个子元素指定一个语言变体的文件名。可选的。
UpdateText如果这是对组件的更新,则添加到组件描述中的描述。可选的。
Default取值为:true、false和script。设置为true可以在安装程序中预先选择组件。这只在没有可见子组件的组件上生效。布尔值直接计算,而脚本在运行时解析。在这个文件中添加脚本的名称作为< script >元素的值。
Essential将包标记为强制重新启动维护工具所必需的。如果一个重要组件有更新可用,那么包管理器将保持禁用状态,直到该组件被更新。在运行更新程序时,会自动安装新引入的基本组件。
ForcedInstallation确定必须始终安装该包。终端用户不能在安装程序中取消选择它。
Replaces要替换的组件的逗号分隔列表。可选的。
DownloadableArchives列出要下载的在线安装程序的数据文件(用逗号分隔)。如果组件内部有一些数据,而package.xml和/或脚本没有DownloadableArchives值,repogen工具会自动注册找到的数据。
RequiresAdminRights如果软件包需要以更高的权限安装,则设置为true。可选的。
Checkable如果要隐藏项目的复选框,请设置为false。当只需要选择几个子组件而不是全部时,这是非常有用的。可选的。
ExpandedByDefault如果希望此项在默认情况下展开,则将其设置为true。可选的。
(2-3)创建多组件安装包的一个示例

经过前面的内容,对package.xml组件包描述文件有了一定了解。总结一下:

​ 1、每个组件包下的meta目录都必须放置一个package.xml用于描述该组件包。

​ 2、packages目录下为放置的组件包。该组件包目录的名称与组件包的依赖有关系。如果目录名称与package.xml描述的依赖关系不一致时,安装时将会出现错误。

​ 【具体步骤】

​ 1、在packages目录创建如下目录,并指定组件之间的依赖关系:
在这里插入图片描述

​ 在上图中,component为根组件,其他的组件都依赖于该组件。

​ 在package.xml文件使用<Dependencies>来执行该组件包的依赖性。如下为component.1.subComponent的package.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>component.1.subComponet</DisplayName>
    <Description>This is component.1.subComponet</Description>
    <Version>1.0.0-1</Version>
    <ReleaseDate>2021-11-07</ReleaseDate>
	<Default>true</Default>
	<Dependencies>component.1</Dependencies>
	<Script>installscript.qs</Script>
</Package>

​ 依次完成各个组件包中package.xml文件中参数设置与依赖关系的设置。

三、生成安装包,运行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iriczhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值