我有一个带有德语翻译的qt项目Translation_de.ts
,它会通过Qmake自动编译成Translation_de.qm
:
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
生成的Translation_de.qm
然后作为资源编译到最终的应用程序中:
RESOURCES += Resources.qrc
其中Resources.qrc
看起来像这样:
<RCC>
<qresource>
...
<file>Translation_de.qm</file>
</qresource>
</RCC>
所有这一切都很好,除了在新结账时第一次调用Qmake会引发以下恼人的警告:
RCC: Error in 'Resources.qrc': Cannot find file 'Translation_de.qm'
我在这做错了什么?如何正确指定Translation_de.qm
等自动生成的资源文件?
使用例如qmake阶段创建生成的文件system(lrelease...)
。保留其他规则,以便在更改输入文件时不必重新运行qmake。
http://doc.qt.io/qt-5/qmake-variable-reference.html
CONFIG + = lrelease #generates * .qm文件从TRANSLATIONS =到目录builddir / .qm / CONFIG + = embed_translations #adds他们作为qrc资源
所以(除了)
CONFIG+=lrelease embed_translations
不需要qmake魔法。您的qm文件将在:/ i18n /下,除非您另行指定
QM_FILES_RESOURCE_PREFIX=/my/customtranslationdirectory
我认为你想要的只是lrelease.CONFIG的“ignore_no_exist”
据我所知,target_predeps确保在发出“正常”编译步骤之前执行它。因此,如果它真的只是摆脱警告,只需添加上面给出的标志。执行qmake调用创建的makefile后,qm创建应该可以正常工作。
如果未创建qm文件,请尝试添加:
PRE_TARGETDEPS += compiler_lrelease_make_all
查看此link以获取更多可能对您有所帮助的选项。