I have a Qt project with a german translation, Translation_de.ts
, which is automatically compiled into Translation_de.qm
via 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
The generated Translation_de.qm
is then compiled into the final application as a resource:
RESOURCES += Resources.qrc
where Resources.qrc
looks like this:
<RCC>
<qresource>
...
<file>Translation_de.qm</file>
</qresource>
</RCC>
All of this works fine, except that the very first call to Qmake on a fresh checkout throws the following annoying warning:
RCC: Error in 'Resources.qrc': Cannot find file 'Translation_de.qm'
What am I doing wrong here? How do I correctly specify an auto-generated resource file like Translation_de.qm
?
Create the generated files in qmake phase with e.g. system(lrelease...)
. Leave the other rules in place too so you don't have to rerun qmake when the input files are changed.
http://doc.qt.io/qt-5/qmake-variable-reference.html
CONFIG+=lrelease #generates *.qm files from TRANSLATIONS= to the directory builddir/.qm/
CONFIG+=embed_translations #adds them as qrc resources
so (other than)
CONFIG+=lrelease embed_translations
no qmake magic is required. Your qm files will be under :/i18n/ unless you specify otherwise with
QM_FILES_RESOURCE_PREFIX=/my/customtranslationdirectory
I think that what you want is just "ignore_no_exist" for lrelease.CONFIG
As far as I know the target_predeps ensures that it is executed before the 'normal' compilation steps are issued. So if it's really only about getting rid of the warning, just add the above given flag. Your qm creation should work once you execute the makefile that was created by the qmake call.
If your qm files are not created try to add:
PRE_TARGETDEPS += compiler_lrelease_make_all
Check out this link for more options that might help you.