赞
踩
Qt IFW是Qt官方提供的打包工具。
下载地址:http://download.qt.io/official_releases/qt-installer-framework
官方文档:https://doc.qt.io/qtinstallerframework/index.html
安装后将bin目录添加到环境变量。
建立如下的目录结构,将要打包的所有文件复制到 data 文件夹中。
在config文件夹中建一个config.xml文件。内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <Installer>
- <Name>Hello World</Name>
- <Version>1.0.0</Version>
- <Publisher>张三</Publisher>
- <StartMenuDir>hello</StartMenuDir>
- <TargetDir>C:\Program Files\Hello World</TargetDir>
- </Installer>
配置文件的配置元素如下:
可以使用预定义的变量(嵌入在 @ 字符中)作为元素的值。预定义变量:
packages文件夹可以放多个组件(package)。
在meta文件夹中创建一个package.xml文件。此文件描述的是 com.helloWorld 这个组件的信息。文件内容如下:
- <?xml version="1.0"?>
- <Package>
- <DisplayName>hello World 组件</DisplayName>
- <Description>测试程序</Description>
- <Version>1.0.0</Version>
- <ReleaseDate>1949-10-01</ReleaseDate>
- <Name>com.helloworld</Name>
- <Script>installscript.qs</Script>
- </Package>
此文件可用的元素信息:
在meta文件夹创建一个 installscript.qs 文件即 package.xml 中指定的脚本名称,用作配置将程序添加到开始菜单的相关设置。内容如下:
- function Component()
- {
- }
-
- Component.prototype.createOperations = function()
- {
- component.createOperations();
- if (systemInfo.productType === "windows")
- {
- //开始菜单快捷方式
- component.addOperation("CreateShortcut", // 创建快捷方式
- "@TargetDir@/helloWorld.exe", // 默认安装目录/helloWorld.exe
- "@StartMenuDir@/helloWorld.lnk", //开始菜单
- "workingDirectory=@TargetDir@");
-
- //桌面快捷方式
- component.addOperation("CreateShortcut",
- "@TargetDir@/helloWorld.exe",
- "@DesktopDir@/helloWorld.lnk",
- "workingDirectory=@TargetDir@");
- }
- }
然后是打包,进入helloWorld_Release目录,执行:
binarycreator -c config\config.xml -p packages helloworld.exe -v
打包成功:
开始菜单和桌面成功创建快捷方式。
在Linux用IFW打包程序基本上和在Windows上打包过程一致,不过创建快捷键不一样。在Windows上面创建快捷方式用到了TargetDir、StartMenuDir这两个变量在Linux是无效的,且系统中桌面文件夹的路径是中文的“桌面”。
参考了这两篇文章:
Qt installer framework 在 linux生成桌面图标
installscript.qs文件内容:
- function Component()
- {
- }
-
- function operationForLinux()
- {
- var params = "Name=UiControl" + "\n";
- params += "Icon=@TargetDir@/uiIcon.png" + "\n";
- params += "Version=@Version@" + "\n";
- params += "Exec=@TargetDir@/UiControl" + "\n";
- params += "Terminal=false" + "\n";
- params += "Encoding=UTF-8" + "\n";
- params += "Type=Application" + "\n";
- params += "Categories=Network" + "\n";
-
- var desktop = "UiControl.desktop";
- component.addOperation("CreateDesktopEntry", desktop, params);
-
- var homeDir = installer.environmentVariable("HOME");
- if(homeDir.length > 0)
- {
- var XDG_DATA_HOME = installer.environmentVariable("XDG_DATA_HOME");//获取XDG_DATA_HOME环境变量
- if(XDG_DATA_HOME.length > 0)
- {
- var XDG_DESKTOP_DIR = installer.environmentVariable("XDG_DESKTOP_DIR");
- component.addOperation("Copy", XDG_DATA_HOME+"/applications/" + desktop, homeDir + XDG_DESKTOP_DIR);
- }
- }
- }
-
- Component.prototype.createOperations = function()
- {
- component.createOperations();
- //if (systemInfo.productType === "linux")
- //{
- operationForLinux();
- //}
- }
这里改成从配置文件里面搜索出桌面的名称,不管是中文还是英文都不影响。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。