Как запустить `lupdate`-инструмент QT с помощью` qmake CONFIG`? - PullRequest
0 голосов
/ 20 сентября 2019

Этот вопрос был ранее опубликован в сообществе qt: https://forum.qt.io/topic/106930/how-to-run-lupdate-with-a-qmake-config

Я использую такую ​​конструкцию в файлах моего проекта:

LANGUAGES = de
TRANSLATION_NAME = authorization
include(../../gen_translations.pri)

, где gen_translations.pri выглядит так:

# parameters: var, prepend, append
defineReplace(prependAll) {
 for(a,$$1):result += $$2$${a}$$3
 return($$result)
}

TRANSLATIONS = $$prependAll(LANGUAGES, $$PWD/libs/$$TRANSLATION_NAME/translations/lib$${TRANSLATION_NAME}_, .ts)

TRANSLATIONS_FILES =

qtPrepareTool(LRELEASE, lrelease)

for(tsfile, TRANSLATIONS) {
 qmfile = $$shadowed($$tsfile)
 qmfile ~= s,.ts$,.qm,
 qmdir = $$dirname(qmfile)
 !exists($$qmdir) {
 mkpath($$qmdir)|error("Aborting.")
 }
 command = $$LRELEASE -removeidentical $$tsfile -qm $$qmfile
 system($$command)|error("Failed to run: $$command")
 TRANSLATIONS_FILES += $$qmfile
}

for(qmentry, $$list($$TRANSLATIONS_FILES)) {
  qmpath = $$OUT_PWD/../translations
  qmpathname = $$replace(qmpath,/,)
  qmpathname = $$replace(qmpathname,\.,)
  qmpathname = $$replace(qmpathname,:,)
  qmpathname = $$replace(qmpathname," ",)
  qmentity = qmfiles_$${qmpathname}
  eval($${qmentity}.files += $$qmentry)
  eval($${qmentity}.path = $$qmpath)
  INSTALLS *= $${qmentity}
}

Он генерирует для меня файлы *.qm и перемещает их в определенное место с помощью make install.

Я не хочу, чтобы qmake выполнял весь этот материал для каждой сборкина моей развивающейся машине.Поэтому я хочу сделать его условным, обернув его для qmake:

translate{
LANGUAGES = de
TRANSLATION_NAME = authorization
include(../../gen_translations.pri)
}

Таким образом, я могу решить, когда я хочу получить *.qm файлы, а когда нет.Но тогда я не могу запустить lupdate для файла проекта заранее, потому что он заблокирован этим условием.

Я уверен, что у кого-то есть лучшая идея для выполнения задачи.

Заранее спасибо.

1 Ответ

0 голосов
/ 20 сентября 2019

Я делюсь здесь своим рецептом для проекта vmpk .Я позаимствовал его у проекта Arora (я думаю).Это намного проще, чем у вас, и я позволю qmake решить, нужно ли заново генерировать какие-либо файлы .qm после удаления вывода или изменения ввода .ts, как это делает любой другой компилятор.

updateqm.pri

# update translations

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

updateqm.input = TRANSLATIONS
updateqm.output = $$OUT_PWD/${QMAKE_FILE_BASE}.qm
updateqm.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm $$OUT_PWD/${QMAKE_FILE_BASE}.qm
updateqm.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += updateqm

project.pro:

TRANSLATIONS +=  \
    translations/project_en.ts \
    translations/project_cs.ts \
    translations/project_de.ts \
    translations/project_es.ts \
    translations/project_fr.ts \
    translations/project_ru.ts 

include(updateqm.pri)

С этим файлом проекта вы можете сделать, как всегда:

lupdate project.pro

В любом случае, Qt5 имеетвстроенная опция CONFIG+=lrelease, которая делает "updateqm.pri" устаревшим.

...