安装脚本中的版本占位符

时间:2017-06-19 06:43:38

标签: qt qt-installer

我们正在使用Qt Installer Framework来创建我们的产品安装程序。大多数事情都运行得很顺利,但仍有一些未解决的问题。

每次我们创建新产品版本时都会经常发生,我们必须更新<Version>package.xml标记的内容。但是我们还需要更改installscript.qs中安装程序创建的链接的名称,以便客户端可以区分程序的两个并行安装版本。

E.g。这里安装后会在startmenu中显示MyApplication-2.1之类的链接。

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

很遗憾,我不能写@ProductVersion@@Version@而不是2.1,而是指<Version> package.xml标记的内容。相反,@ProductVersion@@Version@似乎是指<Version>config.xml标记的内容,这不是理想的行为。

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

1 个答案:

答案 0 :(得分: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|@DATE@|`$$DATE_CMD`|g\" \"{}\" \;"
SED_VERSION_CMD="find $$shell_path($$PWD) \\\( -name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|@VERSION@|$${VERSION}|g\" \"{}\" \;"
SED_DATE_UNDO="find $$shell_path($$PWD) \\\( -name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|<ReleaseDate>`$$DATE_CMD`<|<ReleaseDate>@DATE@<|g\" \"{}\" \;"
SED_VERSION_UNDO="find $$shell_path($$PWD) \\\( -name "package.xml" -or -name "config.xml" \\\) -exec sed -i \"s|<Version>$${VERSION}<|<Version>@VERSION@<|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

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