0

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

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

例如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,这不是所需的行为。

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

4

1 回答 1

0

在 Linux 上,我使用了 sed,基于

在我设置生成安装程序的 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@,构建它们,然后将它们放回原处。更好的解决方案可能是将文件从源代码树中复制出来。

于 2017-06-19T21:14:17.913 回答