2016-03-03 1 views
2

Comment qt détecte-t-il si la génération est nécessaire ou non, par exemple. si un fichier source ou dans mon cas un fichier de ressources (.qrc) a été modifié après la dernière version? Y a-t-il un drapeau pour chaque fichier? Ce que je veux faire exactement est, pour envoyer une commande de système de compilation des ressources en ajoutant ceci au fichier .pro:Détection de fichiers modifiés au cours de qmake

system(rcc -binary -no-compress resource.qrc -o resource.rcc) 

Et je veux le faire que si le fichier resource.qrc modifié après le dernier qmake. Est-ce possible et comment?

version finale devrait être:

if(RESOURCE_MODIFIED) { 
    COMPILE RESOURCE 
} 
+1

Le système de construction fait. En général, qmake est utilisé pour générer un fichier makefile. Le fichier makefile liste les cibles et leurs dépendances. Ce que vous devez faire est d'ajouter une nouvelle * cible * à votre fichier de projet, pas un appel système. –

+0

Pourriez-vous s'il vous plaît donner un exemple de code pour ajouter la nouvelle cible? Je pense que toutes les informations requises sont dans l'appel système sous ma question initiale. – OnurA

+0

Je pense que vous devez regarder dans la documentation de qmake. Pour ce que ça vaut, c'est * est * documenté :) –

Répondre

0

Comme répondu dans un autre discussion, la réponse complète correcte est le code suivant:

mytarget.target = resource.rcc 
mytarget.commands = rcc -binary -no-compress resource.qrc -o resource.rcc 
mytarget.depends = resource.qrc 

QMAKE_EXTRA_TARGETS += mytarget 
PRE_TARGETDEPS += resource.rcc 

De cette façon, la cible personnalisée ne sera reconstruit, si le fichier .qrc est modifié et make est automatiquement exécuté lorsque l'application est en cours de compilation. Qt et qmake ne jouent aucun rôle dans cela.

1

QMake crée GNU Makefile (en supposant que vous utilisez Qt Creator ou QMake directement dans son mode par défaut) et le Makefile généré aura une liste de cibles qui sera créé , leurs dépendances et les règles pour créer les cibles. Lorsque vous générez, effectuez des vérifications pour voir si l'une des dépendances a un horodatage de fichier plus récent que l'horodatage du fichier de la cible et exécute les règles pour recréer la cible. Kuba l'a déjà mentionné dans les commentaires - vous cherchez probablement add a custom target.

mytarget.target = resource.rcc 
mytarget.commands = rcc -binary -no-compress resource.qrc -o resource.rcc 
mytarget.depends = resource.qrc 

QMAKE_EXTRA_TARGETS += mytarget 
+0

Dans le lien que vous avez fourni, il s'agit de savoir quand les fichiers .cpp sont générés. Cependant, dans mon cas, je n'ai aucun fichier .cpp. Je n'ai que les fichiers .qrc et .rcc. – OnurA

+0

@OurA, désolé, j'ai mal lu. Kuba a essentiellement répondu dans les commentaires. J'ai mis à jour avec un lien vers cette section et un exemple qui devrait donner une idée de l'endroit où aller. – Linville

+0

cela ne fonctionne pas lorsque j'exécute qmake ou que je compile le projet. Cependant quand je cours "make resource.rcc" dans le répertoire de construction, il construit le fichier .. Pourquoi est-ce? Comment puis-je faire une cible automatiquement? – OnurA