Bonjour,
Je face une petite énigme technique concernant des projets interconnectés.
J'ai développé un projet, appelons-le PROJET, constitué d'un certain nombre de sources rangées en sous-dossiers. Ce projet-là ne me pose pas de problème, je le compile normalement et il me sort tous les fichiers qui vont bien (moc_, .o, .exe) dans un dossier de build, appelons-le PROJ_BUILD.
Mais j'aimerais pouvoir tester un nouveau "module" que je viens d'ajouter au projet, à savoir les sources réunies dans sous-dossier en particulier (elles fournissent une partie qui peut-être indépendante), appelons-le MODULE.
Pour ce faire, j'ai développé une petit projet de test, appelons-le TEST qui va introspecter les méta-objets que je lui donne pour en exposer les méthodes et construire une IHM de test.
Ce que je voudrais, c'est pouvoir ajouter au projet TEST des dépendances vers MODULE sans les inclure dans le projet TEST afin de les utiliser toujours dans l'état qu'elle ont dans PROJET. Donc je ne veux pas simplement faire un copier/coller de MODULE pour l'ajouter au projet TEST car alors j'aurais toujours deux versions de MODULE dans deux endroits différents.
En somme, voilà ce que je veux faire :
- Je compile PROJET normalement, qui va me sortir tous les fichiers qui vont bien dans PROJ_BUILD.
- Je compile TEST, qui va chercher les headers dans PROJET/MODULE et les moc_ et .o correspondants directement dans le dossier PROJ_BUILD
Pour les headers, c'est facile, il me suffit de rajouter le chemin vers PROJET/MODULE dans INCLUDEPATH, ça fonctionne.
- Je croyais qu'en ajoutant le chemin vers PROJ_BUILD dans DEPENDPATH, le linker serait alors capable d'aller chercher les .o et moc_ déjà compilés associés aux headers du module afin de compiler le projet de TEST. Mais manifestement cela ne fonctionne pas.
Voilà à quoi ressemble l'extrait de code dans TEST.pro :
(OS ET BUILD sont définis en amont).
Existe-t-il un moyen de réaliser cela sans trop de difficultés ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 TESTED_PROJECT = "PROJET" TESTED_PACK = "MODULE" INCLUDEPATH += "C:/VBoxShared/Developpements/Sources/"$${TESTED_PROJECT}/$${TESTED_PACK} TESTED_BUILD = "C:/VBoxShared/Developpements/Shadows/"$${TESTED_PROJECT}/$${OS}/$${QT_VERSION}/$${BUILD} DEPENDPATH += $${TESTED_BUILD}/.obj $${TESTED_BUILD}/.moc $${TESTED_BUILD}/.rcc $${TESTED_BUILD}/.ui
EDIT : J'ai également testé une autre solution, à savoir fusionner les répertoires de sortie de compilation des fichiers intermédiares de TEST avec ceux de PROJET, me disant naïvement que le compilateur de TEST saurait alors retrouver les fichiers .o s'ils sont dans son répertoire de sortie désigné.
Malheureusement, en plus d'être inélégant, cela ne fonction pas davantage. J'ai toujours les mêmes erreur "undefined reference" à la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 TESTED_PROJECT = "PROJET" TESTED_PACK = "MODULE" INCLUDEPATH += "C:/VBoxShared/Developpements/Sources/"$${TESTED_PROJECT}/$${TESTED_PACK} TESTED_BUILD = "C:/VBoxShared/Developpements/Shadows/"$${TESTED_PROJECT}/$${OS}/$${QT_VERSION}/$${BUILD} OBJECTS_DIR = $${TESTED_BUILD}/.obj MOC_DIR = $${TESTED_BUILD}/.moc RCC_DIR = $${TESTED_BUILD}/.rcc UI_DIR = $${TESTED_BUILD}/.ui
Partager