Как указать Qmake автоматически сгенерированные файлы ресурсов?

У меня есть проект 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?


person vog    schedule 06.12.2010    source источник


Ответы (3)


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

person laalto    schedule 07.12.2010

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
person Imre    schedule 20.12.2018

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

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

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

    PRE_TARGETDEPS += compiler_lrelease_make_all

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

person Martin Gerhardy    schedule 23.05.2014
comment
qmake не будет создавать зависимости для файлов, которые не может найти. Полученный Makefile не сможет создать параллельную сборку. - person Orivej Desh; 05.12.2017
comment
у вас ссылка мертва. - person Martin Delille; 18.02.2019