IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Discussion :

Problème de création de .pro afin de définir une variable pour les sous-projets


Sujet :

Outils

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut Problème de création de .pro afin de définir une variable pour les sous-projets
    Bonjour à tous,

    Pour le défi Qt, j'ai un petit problème (qui m'embête beaucoup).
    J'ai plusieurs .pro, car tout mon projet est construit de façon modulaire.

    Afin de simplifier la tache à tout le monde, je voulais avoir un .pro utilisant le template subdirs, pour compiler toutes les parties du projet.
    Malheureusement, pour que cela marche parfaitement, il faudrait que j'arrive a définir DESTDIR directement à partir du .pro parent. Le problème, c'est qu'il ne prend absolument pas en compte cette variable (ou que même si il prend en compte, elle est oublié car je sors du .pro (donc hors focus)).
    Avez vous une idée, soit pour définir DESTDIR et qu'elle soit comptabilisé dans le .pro enfant, soit pour définir une sorte de flag permanent (comme ça, je pourrais faire un test dans le .pro enfant).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Dans les sources de Qt creator, ils définissent leurs variables (et des tas d'autres trucs) dans des fichiers ".pri" du répertoire racine.

    Ensuite dans chaque sous répertoire, pour les ".pro" qui en ont besoin ils font un "include(../truc.pri)"

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je vais regarder. Il est vrai que j'ai vu ces fichiers, sans trop faire attention.

    Mon histoire, c'est que pour un même .pro, je veux deux DESTDIR différent. En fait, comme ce sont des modules, le .pro peut être exécuté tout seul, dans les cas de test hors de l'application.
    Mais, lorsque l'on compile l'application complête, les .pro inclut doivent avoir un nouveau DESTDIR pour être en accord avec le projet (et non, le module a exécution autonome).

    Ainsi, si j'inclus le .pri dans le .pro, il aura toujours le même DESTDIR (sauf si l'inclusion est fait dans le .pro parent (template subdir)?) Mais je doute.

    Une autre solution possible, serait aussi d'avoir une méthode multiplateforme, pour copier des fichiers. Mais ça, je n'ai pas trouvé.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    En fait, pour faire ce que tu souhaites, il suffit de créer une variable dans un fichier .pri de la racine du projet puis de mettre un DESTDIR dans chaque .pro des sous-projet en utilisant cette variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // root.pro
    TEMPLATE = subdirs
    SUBDIRS += app1 app2
     
    // root.pri
    ROOT_DIR = $$PWD
    BIN_DIR = $$ROOT_DIR/bin
     
    // app1/app1.pro
    include(../root.pri)
    DESTDIR = $$BIN_DIR 
     
    // app2/app2.pro
    include(../root.pri)
    DESTDIR = $$BIN_DIR
    Le top, c'est de contrôler aussi où vont les fichiers intermédiaires (.o,
    moc_*cpp, makefile, etc.)


    Pour la copie de fichier, tu peux lancer une commande avec system() selon la plateforme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    win32:system(cp app1 ../bin)
    win32:system(copy app1 ../bin)

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Désolé gbdivers, je ne comprends pas comment cela corrige mon problème.

    Je m'explique.
    J'ai des petits projets, avec tous, leur DESTDIR de définie afin de mettre le résultat dans un dossier spécial.
    Maintenant, tout ces petits projets, je veux les regrouper dans un gros super projet. Donc j'ai rajouté un .pro, qui utilise le template subdir.
    Je veux, dans la théorie, définir la variable DESTDIR dans le .pro du gros projet, afin de modifier le DESTDIR des petits projets.

    Ce que vous faites, c'est que dans tout les cas (que je compile petit ou gros projet) j'aurais le même DESTDIR, car dans tout les cas, l'inclusion du .pri sera effectué.

    Et puis, pour la copie, c'est plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    linux:system(cp app1 ../bin)
    win32:system(copy app1 ../bin)
    Mais, pour mac os x et Symbian et Maemo (ou je ne sais quoi).
    Je trouve que cela devrait être normalisé, surtout que dans le Makefile généré, on voit bien un:
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Désolé gbdivers, je ne comprends pas comment cela corrige mon problème.

    Je m'explique.
    J'ai des petits projets, avec tous, leur DESTDIR de définie afin de mettre le résultat dans un dossier spécial.
    Maintenant, tout ces petits projets, je veux les regrouper dans un gros super projet. Donc j'ai rajouté un .pro, qui utilise le template subdir.
    Je veux, dans la théorie, définir la variable DESTDIR dans le .pro du gros projet, afin de modifier le DESTDIR des petits projets.

    Je t'ai donné un exemple dans lequel tous les binaires sont installé dans un répertoire unique mais rien t'interdit de faire autrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // app1/app1.pro
    include(../root.pri)
    DESTDIR = $$BIN_DIR/app1
    # ou
    DESTDIR = $$ROOT_DIR/app1
    Si ça convient pas, je comprend pas la question. Peux tu donner un exemple de structure que tu as et ce que tu souhaites obtenir ?

    Citation Envoyé par LittleWhite
    Et puis, pour la copie, c'est plus:
    Erreur de copier-coller

    Citation Envoyé par LittleWhite
    Je trouve que cela devrait être normalisé, surtout que dans le Makefile généré, on voit bien un:
    En fait non, le makefile est généré en fonction de la plateforme. Les commandes a utiliser sont spécifiées dans les mkspecs. Tu as dans les versions linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QMAKE_COPY            = cp -f
    QMAKE_COPY_FILE       = $(COPY)
    QMAKE_COPY_DIR        = $(COPY) -r
    QMAKE_MOVE            = mv -f
    QMAKE_DEL_FILE        = rm -f
    QMAKE_DEL_DIR         = rmdir
    et dans les versions win32 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QMAKE_COPY		= copy /y
    QMAKE_COPY_DIR		= xcopy /s /q /y /i
    QMAKE_MOVE		= move
    QMAKE_DEL_FILE		= del
    QMAKE_MKDIR		= mkdir
    QMAKE_DEL_DIR		= rmdir

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je retente ...

    J'ai un petit projet, disons PP1 avec son dossier PP1 et une architecture de fichiers comme suit:
    - PP1/
    - PP1.pro
    - Sources
    - PP1_main.cpp

    Voilà. Dans ce point pro, je définit un DESTDIR qui est par exemple PP1/Bin

    Maintenant, ce PP1 est un truc modulaire pour un plus gros projet, nommé GP, qui englobe tout.
    Architecture des fichiers:
    - PP1 ( je ne cite pas son contenu, vois ci-dessus)
    - PP2 ( un deuxième module, même si c'est le core)
    - GP.pro

    Le GP.pro est un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TEMPLATE    = subdirs
    CONFIG += ordered
    SUBDIRS     = PP1 \
                  PP2 \
    Et je veux que tout les exécutables qui seront compilé durant la compilation de GP, aillent dans un dossier genre GP/Bin
    Ok, mais le problème, c'est que PP1 et PP2 ont des .pro qui définissent le DESTDIR à PP1/bin , et du coup, lors de la compilation de GP, bah ils vont toujours être dans les dossiers PP (et donc tout les fichiers sont séparés et c'est moche).

    J'espère que j'ai été clair, cette fois.

    EDIT:
    Puis je utiliser les QMAKE_COPY ? Je crains que non.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Ok, c'est ce que j'ai présenté dans mon premier post alors. Il faut modifier le pp1.pro. Si tu ne peux/veux pas, 2 solutions : c'est prévu dans le pp1 par une variable à définir : regarde dans la doc de pp1 ou dans le .pro ; c'est pas prévu... et il faut copier. Mais je sais pas comment on fait (c'est possible mais il faut regarder un peu la doc de qmake)

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je ne comprends pas (désolé).

    Si je rajouter un include(fichier.pri) dans le PP1.pro, que ce soit par le biais de GP.pro ou de PP1.pro, il va toujours avoir le même DESTDIR.

    Moi, je veux qu'il conserve le DESTDIR à PP1/Bin, s'il n'est pas inclut (ou compiler avec) par GP.

    La solution, dans ma tête:
    - Définir DESTDIR dans GP.pro à GP/Bin
    - Vérifier dans PP1.pro si DESTDIR est défini, si non, alors définir à PP1/Bin
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2015, 11h16
  2. Réponses: 5
    Dernier message: 28/03/2012, 17h04
  3. Réponses: 1
    Dernier message: 04/02/2010, 11h45
  4. Définir une variable d'environnement sous ubuntu
    Par sheura dans le forum Administration système
    Réponses: 6
    Dernier message: 24/03/2008, 10h17
  5. Réponses: 2
    Dernier message: 26/06/2006, 02h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo