2010-12-06 34 views
6

J'ai un projet Qt avec une traduction allemande, Translation_de.ts, qui est automatiquement compilé dans Translation_de.qm via Qmake:Comment spécifier des fichiers de ressources générés automatiquement à 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 

Le produit Translation_de.qm est ensuite compilé dans l'application finale comme ressource:

RESOURCES += Resources.qrc 

Resources.qrc ressemble à ceci:

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

A ll de cela fonctionne bien, sauf que le premier appel à Qmake sur une caisse fraîche lance l'avertissement suivant gênant:

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

Qu'est-ce que je fais mal ici? Comment puis-je spécifier correctement un fichier de ressources généré automatiquement, tel que Translation_de.qm?

Répondre

6

Créez les fichiers générés en phase qmake avec par ex. system(lrelease...). Laissez les autres règles en place pour ne pas avoir à réexécuter qmake lorsque les fichiers d'entrée sont modifiés.

2

Je pense que ce que vous voulez est juste « ignore_no_exist » pour lrelease.CONFIG

Pour autant que je sais que les target_predeps assure qu'il est exécuté avant les étapes de compilation « normales » sont émises . Donc, si c'est seulement pour se débarrasser de l'avertissement, il suffit d'ajouter le drapeau ci-dessus. Votre création de qm devrait fonctionner une fois que vous avez exécuté le makefile créé par l'appel qmake.

Si vos fichiers ne sont pas créés qm essayez d'ajouter:

PRE_TARGETDEPS += compiler_lrelease_make_all 

Vérifiez cette link pour plus d'options qui pourraient vous aider.

+0

'qmake' ne générera pas de dépendances aux fichiers qu'il ne peut pas trouver. Le Makefile résultant échouera à la construction parallèle. –