J'ai un projet Qt et je voudrais sortir des fichiers de compilation en dehors de l'arborescence des sources.
J'ai actuellement la structure de répertoires suivante:
/
|_/build
|_/mylib
|_/include
|_/src
|_/resources
En fonction de la configuration (debug / release), j'aimerai sortir les fichiers résultants dans le répertoire build sous les répertoires build / debug ou build / release.
Comment puis-je faire cela en utilisant un fichier .pro?
Réponses:
La réponse courte est: vous ne le faites pas .
Vous devez exécuter
qmake
suivi demake
dans le répertoire de construction dans lequel vous voulez construire. Donc, exécutez-le une fois dans undebug
répertoire, une fois dans unrelease
répertoire.C'est ainsi que quiconque construit votre projet s'attend à ce qu'il fonctionne, et c'est ainsi que Qt lui-même est configuré pour construire, c'est aussi ainsi que Qt Creator s'attend à ce que votre
.pro
fichier se comporte: il démarre simplementqmake
, puismake
dans le dossier de construction pour la configuration choisie par votre cible.Si vous souhaitez créer ces dossiers et y effectuer les deux (ou plus) builds, vous aurez besoin d'un makefile de niveau supérieur, éventuellement créé à partir d'un fichier de projet de niveau supérieur via qmake.
Il n'est pas rare d'avoir plus de deux configurations de build, donc vous vous engagez inutilement à ne faire la différence qu'entre une build et une release; vous pourriez avoir des builds avec différents niveaux d'optimisation, etc. La dichotomie débogage / version est préférable de laisser reposer en paix.
la source
Pour mon projet Qt, j'utilise ce schéma dans le fichier * .pro:
C'est simple mais sympa! :)
la source
DESTDIR
s sous condition, et ensuite utiliser cette valeur dans tous vos autres chemins:OBJECTS_DIR = $${DESTDIR}/.obj
. À votre santé!Debug
àdebug
etRelease
àrelease
.Pour changer le répertoire de la dll / exe cible, utilisez ceci dans votre fichier pro:
Vous voudrez peut-être aussi changer de répertoire pour d'autres cibles de construction comme les fichiers objet et les fichiers moc (vérifiez la référence de la variable qmake pour plus de détails ou la référence de la fonction qmake CONFIG () ).
la source
OBJECTS_DIR = $$DESTDIR/.obj MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui
CONFIG()
s'avère résoudre certains problèmes d'utilisationrelease:
etdebug:
J'ai une approche plus compacte:
la source
La bonne façon de procéder est la suivante (merci l'équipe de support QT):
Plus d'informations ici: https://wiki.qt.io/Qt_project_org_faq#What_does_the_syntax_CONFIG.28debug.2Cdebug.7Crelease.29_mean_.3F_What_does_the_1st_argument_specify_and_similarly_nd_what_is_the_2
la source
J'utilise la même méthode suggérée par chalup,
la source
Ancienne question, mais qui mérite toujours une réponse à jour. Aujourd'hui, il est courant de faire ce que Qt Creator fait lorsque des builds shadow sont utilisés (ils sont activés par défaut lors de l'ouverture d'un nouveau projet).
Pour chaque cible et type de build différents, le droit
qmake
est exécuté avec les bons arguments dans un répertoire de build différent. Ensuite, cela est simplement construit avec simplemake
.Ainsi, la structure de répertoires imaginaire pourrait ressembler à ceci.
Et la chose importante est, a
qmake
est exécuté dans le répertoire de construction:Ensuite, il génère des makefiles dans le répertoire de construction, puis
make
des fichiers génère également des fichiers sous celui-ci. Il n'y a aucun risque que différentes versions se mélangent, tant que qmake n'est jamais exécuté dans le répertoire source (si c'est le cas, mieux vaut bien le nettoyer!).Et une fois fait comme ça, le
.pro
fichier de la réponse actuellement acceptée est encore plus simple:la source
$(OUT_PWD)
est une solution?mylib
? J'aimerais qu'il y ait une façon "gracieuse" de faire cela, je ne vois pas d'autre moyen que d'utiliser les techniques des autres réponses: utilisez le type de construction et la configuration pour remplirLIBS
de manière intelligente, annulant l'avantage de la construction de l'ombre.include(../mylib/mylib.pri)
Il est également utile d'avoir un nom légèrement différent pour l'exécutable de sortie. Vous ne pouvez pas utiliser quelque chose comme:
Pourquoi cela ne fonctionne pas n'est pas clair, mais ce n'est pas le cas. Mais:
Cela fonctionne tant que la
CONFIG +=
ligne la précède.la source
La nouvelle version de Qt Creator a également une option de construction «profil» entre le débogage et la publication. Voici comment je détecte cela:
la source
1. Trouvez Debug / Release dans CONFIG
Obtenez le courant (debug | release).
(Peut être multiple, donc ne conserver que le dernier spécifié dans la construction):
2. Réglez DESTDIR
Utilisez-le a le nom du sous-répertoire de construction
la source
Ceci est mon Makefile pour différents répertoires de sortie de débogage / version. Ce Makefile a été testé avec succès sur Ubuntu Linux. Il devrait fonctionner de manière transparente sous Windows à condition que Mingw-w64 soit correctement installé.
la source