如何为Qmake指定自动生成的资源文件?

vog*_*vog 8 resources qt qmake qt4

我有一个带有德语翻译的Qt项目Translation_de.ts,它Translation_de.qm通过Qmake 自动编译成:

TRANSLATIONS += Translation_de.ts
...
QMAKE_EXTRA_COMPILERS += lrelease
lrelease.input         = TRANSLATIONS
lrelease.output        = ${QMAKE_FILE_BASE}.qm
lrelease.commands      = $$[QT_INSTALL_BINS]/lrelease ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_BASE}.qm
lrelease.CONFIG       += no_link target_predeps
Run Code Online (Sandbox Code Playgroud)

Translation_de.qm然后将生成的内容编译为最终应用程序作为资源:

RESOURCES += Resources.qrc
Run Code Online (Sandbox Code Playgroud)

这里Resources.qrc看起来是这样的:

<RCC>
  <qresource>
    ...
    <file>Translation_de.qm</file>
  </qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

所有这一切都很好,除了在新结账时第一次调用Qmake会引发以下恼人的警告:

RCC: Error in 'Resources.qrc': Cannot find file 'Translation_de.qm'
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?如何正确指定自动生成的资源文件Translation_de.qm

laa*_*lto 7

使用例如在qmake阶段创建生成的文件system(lrelease...).保留其他规则,以便在更改输入文件时不必重新运行qmake.


Imr*_*mre 5

http://doc.qt.io/qt-5/qmake-variable-reference.html

CONFIG + = lrelease#将* .qm文件从TRANSLATIONS =生成到目录builddir / .qm / CONFIG + = embed_translations#将它们添加为qrc资源

所以(不是)

CONFIG+=lrelease embed_translations
Run Code Online (Sandbox Code Playgroud)

不需要qmake魔术。您的qm文件将位于:/ i18n /下,除非您另外指定

QM_FILES_RESOURCE_PREFIX=/my/customtranslationdirectory
Run Code Online (Sandbox Code Playgroud)