2010-12-06 5 views
6

Ich habe ein Qt-Projekt mit einer Deutsch Übersetzung, Translation_de.ts, die automatisch in Translation_de.qm über Qmake kompiliert wird:Wie Sie automatisch generierte Ressourcendateien für Qmake angeben?

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 

Das erzeugte Translation_de.qm dann in die Endanwendung als Ressource kompiliert wird:

RESOURCES += Resources.qrc 

wo Resources.qrc sieht wie folgt aus:

<RCC> 
    <qresource> 
    ... 
    <file>Translation_de.qm</file> 
    </qresource> 
</RCC> 

A ll dies funktioniert gut, außer dass der erste Aufruf an Qmake auf einer frische Kasse führt die folgende belästigende Warnung:

RCC: Error in 'Resources.qrc': Cannot find file 'Translation_de.qm' 

Was mache ich falsch hier? Wie kann ich eine automatisch generierte Ressourcendatei wie Translation_de.qm korrekt angeben?

Antwort

6

Erstellen Sie die generierten Dateien in qmake-Phase mit z. system(lrelease...). Überlassen Sie auch die anderen Regeln, damit Sie qmake nicht erneut ausführen müssen, wenn die Eingabedateien geändert werden.

2

Ich denke, dass das, was Sie wollen, ist nur „ignore_no_exist“ für lrelease.CONFIG

Soweit ich weiß, dass die target_predeps sorgt dafür, dass er ausgeführt wird, bevor die ‚normalen‘ Kompilation Schritte ausgegeben werden . Wenn es also nur darum geht, die Warnung loszuwerden, fügen Sie einfach die oben angegebene Flagge hinzu. Ihre qm-Erstellung sollte funktionieren, sobald Sie das Makefile ausführen, das von dem qmake-Aufruf erstellt wurde.

Wenn Ihre qm Dateien nicht versuchen erstellt werden hinzuzufügen:

PRE_TARGETDEPS += compiler_lrelease_make_all 

Schauen Sie sich diese link für mehr Optionen, die Ihnen helfen könnten.

+0

'qmake' erzeugt keine Abhängigkeiten zu Dateien, die nicht gefunden werden können. Das resultierende Makefile wird beim parallelen Erstellen fehlschlagen. –