Как указать автоматически сгенерированные файлы ресурсов для Qmake? - PullRequest
8 голосов
/ 06 декабря 2010

У меня есть проект Qt с переводом на немецкий язык, Translation_de.ts, который автоматически компилируется в Translation_de.qm через Qmake:

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 ]

8 голосов
/ 07 декабря 2010

Создайте сгенерированные файлы в фазе qmake, например, system(lrelease...).Оставьте и другие правила на месте, чтобы вам не пришлось повторно запускать qmake при изменении входных файлов.

3 голосов
/ 20 декабря 2018

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
1 голос
/ 23 мая 2014

Я думаю, что вам нужно просто " ignore_no_exist " для lrelease.CONFIG

Насколько я знаю, target_predeps гарантирует, что он будет выполнен перед выполнением «обычных» шагов компиляции. Так что если на самом деле речь идет только об избавлении от предупреждения, просто добавьте указанный выше флаг. Ваше создание qm должно работать, как только вы запустите make-файл, который был создан вызовом qmake.

Если ваши файлы qm не созданы, попробуйте добавить:

    PRE_TARGETDEPS += compiler_lrelease_make_all

Проверьте эту ссылку , чтобы получить дополнительные параметры, которые могут вам помочь.

...