qmake和生成的qm文件

时间:2016-07-26 11:39:31

标签: qt qmake

将编译的翻译(* .qm)组织成资源的最佳(正确)方法是什么? * .qm文件在qrc文件中引用,并由两个(三个)额外目标生成:

trans_update.commands = lupdate $$_PRO_FILE_
trans_update.depends = $$_PRO_FILE_

trans_release.commands = lrelease $$_PRO_FILE_
trans_release.depends = trans_update $$TRANSLATIONS

translate.depends = trans_release

QMAKE_EXTRA_TARGETS += trans_update trans_release translate deploy

CONFIG(release, debug|release) {
   DESTDIR=release
   PRE_TARGETDEPS += translate
}

但问题是qmake第一次运行时,还没有生成qm文件,并且会出现如下错误:

RCC: Error in 'qml.qrc': Cannot find file ...

我不喜欢将已编译的qm文件保存到VSC中的想法。

有没有办法很好地组织它?

2 个答案:

答案 0 :(得分:4)

我想指出一些我在某些项目中使用的解决方案。它可能远非完美,但效果很好。

CONFIG(release, debug|release) {
    TRANSLATION_TARGET_DIR = $${OUT_PWD}/release/translations
    LANGUPD_OPTIONS = -locations relative -no-ui-lines
    LANGREL_OPTIONS = -compress -nounfinished -removeidentical
} else {
    TRANSLATION_TARGET_DIR = $${OUT_PWD}/debug/translations
    LANGUPD_OPTIONS =
    LANGREL_OPTIONS = -markuntranslated "MISS_TR "
}

isEmpty(QMAKE_LUPDATE) {
    win32:LANGUPD = $$[QT_INSTALL_BINS]\lupdate.exe
    else:LANGUPD = $$[QT_INSTALL_BINS]/lupdate
}

isEmpty(QMAKE_LRELEASE) {
    win32:LANGREL = $$[QT_INSTALL_BINS]\lrelease.exe
    else:LANGREL = $$[QT_INSTALL_BINS]/lrelease
}

langupd.command = \
    $$LANGUPD $$LANGUPD_OPTIONS $$shell_path($$_PRO_FILE_) -ts $$_PRO_FILE_PWD_/$$TRANSLATIONS

langrel.depends = langupd
langrel.input = TRANSLATIONS
langrel.output = $$TRANSLATION_TARGET_DIR/${QMAKE_FILE_BASE}.qm
langrel.commands = \
    $$LANGREL $$LANGREL_OPTIONS ${QMAKE_FILE_IN} -qm $$TRANSLATION_TARGET_DIR/${QMAKE_FILE_BASE}.qm
langrel.CONFIG += no_link

QMAKE_EXTRA_TARGETS += langupd
QMAKE_EXTRA_COMPILERS += langrel
PRE_TARGETDEPS += langupd compiler_langrel_make_all

可能会对 lupdate 选项进行一次敏感调整,因为各种构建(发布和调试)会生成不同的*.ts文件,然后会触发使用过的VCS的更改。

我也想引导受欢迎的读者到专家使用它的example

答案 1 :(得分:1)

推荐的方法——在最初提出这个问题时可能还没有使用

TRANSLATIONS += <your *.ts files>
CONFIG += lrelease embed_translations

如果您真的需要/想要单独构建 qm 文件,我会指出 qmake 对上述配置的作用并根据您的需要进行调整。见https://github.com/qt/qtbase/blob/5.15.2/mkspecs/features/lrelease.prf (基本上,它会创建资源列表并将其添加到 RESOURCES)。