11
votes

Modèle 'SubDirs' QMake - Exécution d'une cible?

Je pose un système de construction pour mon application QT à l'aide d'un fichier QMake .Pro utilisant le modèle 'SubDirs'. Cela fonctionne bien et me permet de spécifier l'ordre que chaque cible est construite, de sorte que les dépendances fonctionnent bien. Cependant, j'ai maintenant ajouté un outil au projet qui génère un numéro de version (contenant la date de construction, la révision SVN, etc.) utilisée par l'application principale - je peux créer cette version de version d'abord mais quand elle est construite, je veux Pour l'exécuter avant que d'autres cibles soient construites (elle génère un fichier d'en-tête contenant le numéro de version indiquant que l'application principale comprend.)

Par exemple, mon fichier QMake simple ressemble à quelque chose: P>

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = version \
          lib \
          tests \
          mainapp


0 commentaires

4 Réponses :


10
votes

J'utilise actuellement qmake exec mes tests unitaires automatiquement pendant deux ans - et il fonctionne très bien Avoir

un coup d'oeil ici - je fait un mini-guide pratique pour cela. P>

Qt: Tests unitaires automatisés avec qMake p>

résumé Abridged: h1>

Structure h2>
#include "MyUnitTest1.h"
#include "MyUnitTest2.h"

int main(int argc, char** argv) {
    QApplication app(argc, argv);

    int retval(0);
    retval +=QTest::qExec(&MyTest1(), argc, argv);
    retval +=QTest::qExec(&MyTest2(), argc, argv);

    return (retval ? 1 : 0);
}


3 commentaires

Merci. Je viens de lire votre message de blog et j'ai une autre solution pour plusieurs QTest, ce qui signifie que vous n'avez pas besoin d'éditer MAIN.CPP pour ajouter de nouveaux tests - ils sont homologués automatiquement, similaires à la manière dont le Frame de test automatique Boost fonctionne. Faites-moi savoir si vous êtes intéressé.


Ce son semble vraiment intéressant - bien sûr, je suis intéressé :) salut, chris


Changer & myTest1 () à Test MyTest1; ... & Test



0
votes

J'ai essayé de faire beaucoup de choses avec QMake en tant que système de construction au fil des ans. Finalement, je viens de recourir à une étape de pré-QMake. C'est à dire. un script configurant.

Vous pouvez créer votre outil de version là-bas, puis l'exécuter avant d'appeler QMake pour générer les maquillages.

J'ai trouvé le moyen le plus simple d'obtenir des données dans les fichiers Pro, si vous en avez besoin également, c'est générer un fichier .pro.inc et l'inclure de votre pro.


0 commentaires

0
votes

comme 3DH mentionné, vous voulez un qmake_post_link option spécifiée Dans vos fichiers .pro contenant quelque chose que vous voulez exécuter. Donc, pour votre exemple, je ferais quelque chose comme ceci avec le fichier version.pro : xxx

quelque chose de similaire doit fonctionner avec votre répertoire de test. < / p>


0 commentaires

3
votes

J'ai posté un message sur la liste de diffusion des intérêts QT sur une étape de «pré-construction» et peut être effectuée à l'aide d'une combinaison de Pre_TargetDeps et QMake_extra_Targets. Voici la réponse:

Vous pouvez spécifier des étapes de construction personnalisées, par exemple. cela appellerait makemieversion.sh Pour créer myversion.cpp à chaque fois Avant qu'il construit quelque chose: p>

versiontarget.target = myversion.cpp
versiontarget.commands = ./makemyversion.sh
versiontarget.depends = FORCE

PRE_TARGETDEPS += myversion.cpp
QMAKE_EXTRA_TARGETS += versiontarget


1 commentaires

Pre Build est délicate à trouver pour QT, car ils n'ont qu'un QMake_Post_Link, qmake_pre_link et no qmake_pre_built. Merci d'avoir partagé. +2