2017-06-19 48 views
0

我们正在使用Qt安装程序框架来创建我们的产品安装程序。大多数事情都很顺利,但仍有一些尚未解决的问题。安装脚本中的版本占位符

每当我们创建一个新的产品版本时,我们必须更新package.xml中的<Version>标签的内容。但我们还需要更改installscript.qs中由安装程序创建的链接的名称,以便客户端可以区分该程序的两个并行安装版本。

E.g.此处安装后应在开始菜单中出现类似MyApplication-2.1的链接。

Component.prototype.createOperations = function() 
{ 
    try { 
     // call the base create operations function 
     component.createOperations(); 
     component.addOperation("CreateShortcut", "@[email protected]/bin/MyApplication-2.1-vc14.exe", "@[email protected]/MyApplication-2.1.lnk"); 
    } catch (e) { 
     print(e); 
    } 
} 

不幸的是,一个人不能写@[email protected]@[email protected],而不是2.1,指的是<Version>标签的package.xml的内容。相反,@[email protected]@[email protected]似乎是指​​3210内<Version>标记的内容,这不是所需的行为。

我现在的问题是,我需要每次同步版本号,这似乎是相当容易出错。有没有一些解决方法?

+0

您可以编写一个脚本来从'packages.xml'中提取'Version',然后为应用程序名称附加版本创建一个变量,并将其用于'CreateShortcut'中的'TargetDir'和'StartMenuDir'。 – Azeem

回答

0

在Linux上,我用sed的,基于this

在我已经设置了生成安装程序中的qmake的文件:

# Generate version numbers in XML files 
DATE_CMD="date --rfc-3339=date" 
SED_DATE_CMD="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|@[email protected]|`$$DATE_CMD`|g\" \"{}\" \;" 
SED_VERSION_CMD="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|@[email protected]|$${VERSION}|g\" \"{}\" \;" 
SED_DATE_UNDO="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|<ReleaseDate>`$$DATE_CMD`<|<ReleaseDate>@[email protected]<|g\" \"{}\" \;" 
SED_VERSION_UNDO="find $$shell_path($$PWD) \\\(-name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|<Version>$${VERSION}<|<Version>@[email protected]<|g\" \"{}\" \;" 

offlineInstaller.commands = \ 
    $$SED_VERSION_CMD && \ 
    $$SED_DATE_CMD && \ 
    $$QTIFWDIR/bin/binarycreator --offline-only \ 
     -c $$PWD/config/config.xml -p $$PWD/packages $$offlineInstaller.target && \ 
    $$SED_VERSION_UNDO && \ 
    $$SED_DATE_UNDO 

这取代了@ VERSION @和@ DATE @中XML文件构建,然后放回。更好的解决方案可能是将文件复制出源树。

+0

我现在看到你的问题有点不同,但是这可以适应不同的软件包中的VERSION变量。我的挫折是你的反面:我只是想使用产品版本,但QtIFW使包版本是强制性的。 – Yuriy