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

时间:2010-12-06 13:33:54

标签: qt resources qt4 qmake

我有一个带有德语翻译的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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

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

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

所以(不是)

CONFIG+=lrelease embed_translations

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

QM_FILES_RESOURCE_PREFIX=/my/customtranslationdirectory

答案 2 :(得分:1)

我认为你想要的只是&#34; ignore_no_exist &#34;对于 lrelease.CONFIG

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

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

    PRE_TARGETDEPS += compiler_lrelease_make_all

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