Qt qmake和生成的qm文件

Qt qmake和生成的qm文件,qt,qmake,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

将编译后的翻译(*.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中的想法


有什么方法可以很好地组织它吗?

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

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的更改

我还想把读者引导到一个专家使用它的地方。

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

TRANSLATIONS += <your *.ts files>
CONFIG += lrelease embed_translations
TRANSLATIONS+=
CONFIG+=lrelease嵌入\u翻译
如果您真的需要/想要单独构建qm文件,我会指出qmake对上述配置的作用,并根据您的需要对其进行调整。看见
(基本上,它会创建一个资源列表并将其添加到
资源中)

我想到的第一件事是:忽略有关VCS的
*.qm
文件怎么样?我可能会在几分钟内想出一个更好的解决方案。谢谢,如果qrc文件引用*.qm文件,这似乎是一个解决方案谢谢,虽然它不是明确的答案,但它是helpful@IlyaKitaev您必须清楚地阅读它:查看包含选项
-qm
lrelease
调用的参数。这可能有助于组织。我没有将它们组织到任何资源文件中,因为它们是(
*.qm
文件)一种构建产品,它是在每个(发布)构建中创建的。我注意到
\u PRO_文件
\u PRO_文件
变量是mistyped@Piroxiljin谢谢,现在修好了。谢谢这个被低估的解决方案。我将添加以下内容,生成的翻译二进制文件将加载到前缀“i18n”下。顺致敬意,