2016-07-26 6 views
1

Какой лучший (правильный) способ организовать скомпилированные переводы (* .qm) в ресурсы? * .qm файлов упомянутые в QRC файл и порождены два (три) дополнительными целями таким образом:qmake и сгенерированные файлы qm

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.

Есть ли способ организовать это красиво?

+0

Первое, что приходит мне на ум: как насчет игнорирования файлов '* .qm' в отношении VCS? Через несколько минут я смогу найти лучшие решения. – maxik

+0

Спасибо, кажется, решение, если файл qrc ссылается на файлы * .qm – mbg033

ответ

3

Я хотел бы указать решение, которое я использую в некоторых проектах. Это может быть далеко не идеально, но это хорошо работает.

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 

Там может быть sensful твик для LUPDATE варианты, поскольку различные сборки (выпуск и отладка) генерировать различные *.ts файлы, которые затем вызывают изменения в используемых VCS.

Я также хотел бы направить ухоженного читателя на example, где его используют эксперты.

+0

Спасибо, хотя это явно не ответ, было полезно – mbg033

+0

@IlyaKitaev. Вы должны четко прочитать: посмотрите на параметр вызова 'lrelease', который содержит параметр '-qm '. Это может помочь в организации. И я не организовываю их в какой-либо файл ресурсов, поскольку они ('* .qm' -файлы) - своего рода продукт сборки, который создается каждую (выпускную) сборку. – maxik

+0

Я заметил, что переменные '_PRO_FILE_' и' _PRO_FILE_PWD_' ошибочны – Piroxiljin