7 votes

Collisions de noms de fichiers Qt MOC avec plusieurs fichiers .pri

Afin de garder mon projet Qt quelque peu organisé (en utilisant Qt Creator), j'ai un fichier .pro et plusieurs fichiers .pri. Récemment, j'ai ajouté une classe à un de mes fichiers .pri qui a le même nom de fichier qu'une classe qui existait déjà dans un fichier .pri séparé.

La structure des fichiers et les fichiers makefiles générés par qmake semblent ne pas tenir compte de la collision de noms de fichiers qui s'ensuit. Les fichiers moc_* générés sont tous placés dans le même sous-répertoire (soit release, soit debug, selon) et l'un finit par écraser l'autre. Lorsque j'essaie de créer le projet, j'obtiens plusieurs avertissements qui ressemblent à ceci :

Makefile.Release:318: warning: overriding commands for target `release/moc_file.cpp`

Et le projet n'arrive pas à se connecter.

Voici un exemple simple de ce dont je parle.

Structure du répertoire :

\+ project\_dir
| + subdir1
| | - file.h
| | - file.cpp
| + subdir2
| | - file.h
| | - file.cpp
| - main.cpp
| - project.pro
| - subdir1.pri
| - subdir2.pri

Contenu de project.pro :

TARGET = project
TEMPLATE = app
include(subdir1.pri)
include(subdir2.pri)
SOURCES += main.cpp

Contenu de subdir1.pri :

HEADERS += subdir1/file.h
SOURCES += subdir1/file.cpp

Contenu de subdir2.pri :

HEADERS += subdir2/file.h
SOURCES += subdir2/file.cpp

Y a-t-il un moyen de dire à qmake de générer un système qui place les fichiers moc_* de fichiers .pri séparés dans des sous-répertoires séparés ?

4voto

liaK Points 6045

En sous-répertoire1.pri essayez d'ajouter

MOC_DIR = "subdir1/MOCFiles"

Aussi pour sous-répertoire2.pri donner

MOC_DIR = "subdir2/MOCFiles"

Il n'est pas testé. Je vérifie juste. J'espère que ça va marcher.

Edit 1 : Où MOCFiles est le dossier dans lequel vous souhaitez placer vos fichiers moc.

Edit 2 : J'ai juste arrêté de mentionner le répertoire des fichiers MOC puisque cela a été demandé spécifiquement dans la question. Mais en plus, vous devrez peut-être ajouter ce qui suit à chacun des fichiers pri. (Assurez-vous que les dossiers sont différents pour les différents fichiers *.pri).

RCC_DIR = "subdir1/RCCFiles"
UI_DIR = "subdir1/UICFiles"
OBJECTS_DIR = "subdir1/ObjFiles"

Je pense que le fait d'avoir plusieurs fichiers pri peut fonctionner sans collisions en ayant les mêmes noms de fichiers. Puisque vous avez accepté une réponse (qui dit que ce n'est pas possible), faites les changements ci-dessus et essayez. Faites-nous savoir si cela ne fonctionne pas.

3voto

rohanpm Points 3548

La meilleure chose à faire est de s'assurer que tous les fichiers ont un nom unique. Il y a d'autres outils que qmake qui se casseront aussi quand vous essayez de faire ce que vous faites ; vous pouvez aussi potentiellement vous rendre confus (par exemple, comprendre ce que signifie #include "file.h" fait est plus difficile).

0voto

J'ai déjà essayé. La réponse courte est de les nommer différemment d'une manière ou d'une autre. Une autre solution serait de traiter chaque sous-répertoire comme une bibliothèque distincte, avec son propre fichier .pro, et d'utiliser un type de sous-répertoire pour compiler tous les répertoires de bibliothèque.

Si vous voulez vraiment étudier une réponse complète, vous pouvez spécifier l'outil à utiliser pour moc. Dans cette situation, vous pourriez être en mesure de manipuler le nom afin qu'un nom légèrement différent soit utilisé pour les deux fichiers différents. Cependant, vous devrez également vous assurer que chaque fichier portant un nom différent est ajouté à la liste des fichiers à compiler et à lier, et que le fichier moc portant le nom original ne l'est pas (ou votre compilation échouera).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X