2017-04-17 1 views
0

Notre projet utilise C++ et Qt et est construit avec les fichiers qmake et .pro.qmake: make à la fois exécutable et statique lib

Nous avons une structure de projet telle que décrite dans this question. Ce qui signifie une structure de dossiers comme celui-ci:

dossier MonProjet contient

  • Myproject.pro

  • Sous-répertoire App1

  • Sous-répertoire App2

  • Sous-répertoire UnitTest

  • Sous-répertoire commun

Chaque sous-répertoire a son propre fichier .pro (app1.pro; app2.pro; unittest.pro; common.pro) et un certain nombre de fichiers de code source.

common.pro a

TEMPLATE = lib 

Les autres ont

TEMPLATE = app 

Ce qui signifie que le produit staticlib de commun peut être inclus par les autres.

Il y a maintenant quelques classes dans App1 qui pourraient facilement être non testées, donc nous aimerions pouvoir les inclure aussi dans Unittest. Cela signifie que App1 doit être construit à la fois en tant qu'app et en tant que lib.

L'idée actuelle est de diviser le dossier App1 en App1classes et App1main. App1classes contiendrait presque tout et être construit en tant que lib. App1main ne contiendrait que la fonction principale. Cela signifie que lib de app1classes pourrait être inclus par app1main et unittest. La question est de savoir s'il existe une meilleure façon d'y parvenir, c'est-à-dire d'adapter le programme app1.pro afin de créer à la fois un exécutable et un staticlib pouvant être inclus par d'autres utilisateurs.

éditer: J'ai fait deux .Pro dans le même dossier, avec un .pri pour leur partie commune, comme suggéré dans la réponse acceptée. La raison pour laquelle j'ai pensé que cela ne fonctionnerait pas est parce que je pensais que vous ne pouvez avoir qu'un seul fichier .pro dans chaque sous-répertoire, mais vous pouvez avoir plusieurs si vous écrivez ceci dans Myproject.pro:

TEMPLATE = subdirs 
SUBDIRS = Common App1 App2 App1lib Unittest 
App1lib.file = App1/App1lib.pro 

Si. le fichier n'est pas déterminé pour un sous-répertoire, il est supposé être sous-répertoire/sous-répertoire.pro.

Répondre

0

Il est beaucoup plus facile de factoriser app1.pro en app1.pri avec HEADERS, SOURCES, FORMS, etc., puis de l'inclure app1lib.pro et app1app.pro.