我们正在使用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
标记的内容,这不是理想的行为。
我现在的问题是,每次版本号都需要同步,这似乎很容易出错。有一些解决方法吗?
答案 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 @,构建,然后将它们放回去。更好的解决方案可能是将文件复制出源树。