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

问题描述 投票:8回答:3

我有一个带有德语翻译的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等自动生成的资源文件?

qt resources qt4 qmake
3个回答
8
投票

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


3
投票

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

1
投票

我认为你想要的只是lrelease.CONFIG的“ignore_no_exist”

据我所知,target_predeps确保在发出“正常”编译步骤之前执行它。因此,如果它真的只是摆脱警告,只需添加上面给出的标志。执行qmake调用创建的makefile后,qm创建应该可以正常工作。

如果未创建qm文件,请尝试添加:

    PRE_TARGETDEPS += compiler_lrelease_make_all

查看此link以获取更多可能对您有所帮助的选项。

© www.soinside.com 2019 - 2024. All rights reserved.