Bonjours à tous,
J'ai une question à vous poser. Je travail sur un projet de taille moyenne écrit en QT (contenant trois librairies, quelques modules d'extensions, deux exécutables).
Sous Qt, il y a deux manières de faire des includes (j'ai remplacé les plus petit et plus grand que par des guillemets):
inclure le module :
#include "QtGui"
#include "QtXml"
ou inclure chaque élément :
#include "QPushButton"
#include "QDialog"
#include "QFile"
#include "QDomDocument"
Quel est la meilleur méthode pour le temps de compilation ? pour la taille de l'exécutable ?
Sous Windows, j'ai réussi à activer les precompiled_header, mais sous linux, il ne s'active pas automatiquement, et si je les actives manuellement, alors la compilation ne marche pas (il dit ne pas trouver un certain fichier, l'entête précompilé).
Dans l'entête précompilé, sous Windows, j'ai mis les modules, sous Linux (sans entête précompilé), j'utilise les include unitaire. En plus d'accélérer le temps de traitement de compilation, les entêtes précompilés, réduisent également la taille de l'exécutable. Est-ce du uniquement au fait que ce sont des entêtes précompilés, ou parce que j'ai inclus les entêtes modules en entier ?
(Si quelqu'un connais la méthode pour activer les entêtes précompilés sous Linux avec Qt4.4.3 et GCC4, je veux bien la prendre)
# En-tête précompilée
Posté par Benoit . Évalué à 2.
1) Ajoute les lignes suivants au fichier projet (.pro)
CONFIG += precompile_header
PRECOMPILED_HEADER = stable.h
2) Remplir le fichier stable.h avec les en-têtes stables (qui ne sont pas modifiables, par exemple les en-têtes Qt, mais pas les en-têtes du projet)
3) Inclure le fichier stable.h au début de chaque fichier .cpp du projet
Cela devrait marcher.
[^] # Re: En-tête précompilée
Posté par phoenix (site web personnel) . Évalué à 2.
make[1]: entrant dans le répertoire « /home/phoenix/xinx/components »
g++ -m64 -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../qt/mkspecs/default -I. -I../../qt/include/QtCore -I../../qt/include/QtCore -I../../qt/include/QtGui -I../../qt/include/QtGui -I../../qt/include -I../ext/qcodeedit/lib -I../ext/qcodeedit/lib/document -I../ext/qcodeedit/lib/language -I../ext/qcodeedit/lib/qnfa -I../ext/qcodeedit/lib/widgets -I. -I. -x c++-header -c stable_header.h -o ./xinxcmp.gch/c++
g++ -c -include /xinxcmp -m64 -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../qt/mkspecs/default -I. -I../../qt/include/QtCore -I../../qt/include/QtCore -I../../qt/include/QtGui -I../../qt/include/QtGui -I../../qt/include -I../ext/qcodeedit/lib -I../ext/qcodeedit/lib/document -I../ext/qcodeedit/lib/language -I../ext/qcodeedit/lib/qnfa -I../ext/qcodeedit/lib/widgets -I. -I. -o ./directoryedit.o directoryedit.cpp
cc1plus: error: /xinxcmp: Aucun fichier ou répertoire de ce type
make[1]: *** [directoryedit.o] Erreur 1
make[1]: quittant le répertoire « /home/phoenix/xinx/components »
make: *** [sub-components-make_default] Erreur 2
[^] # Re: En-tête précompilée
Posté par Benoit . Évalué à 1.
g++ -m64 -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../qt/mkspecs/default -I. -I../../qt/include/QtCore -I../../qt/include/QtCore -I../../qt/include/QtGui -I../../qt/include/QtGui -I../../qt/include -I../ext/qcodeedit/lib -I../ext/qcodeedit/lib/document -I../ext/qcodeedit/lib/language -I../ext/qcodeedit/lib/qnfa -I../ext/qcodeedit/lib/widgets -I. -I. -x c++-header -c stable_header.h -o ./xinxcmp.gch/c++
g++ -c -include /xinxcmp -m64 -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../qt/mkspecs/default -I. -I../../qt/include/QtCore -I../../qt/include/QtCore -I../../qt/include/QtGui -I../../qt/include/QtGui -I../../qt/include -I../ext/qcodeedit/lib -I../ext/qcodeedit/lib/document -I../ext/qcodeedit/lib/language -I../ext/qcodeedit/lib/qnfa -I../ext/qcodeedit/lib/widgets -I. -I. -o ./directoryedit.o directoryedit.cpp
[^] # Re: En-tête précompilée
Posté par phoenix (site web personnel) . Évalué à 1.
Peut-être il y a une erreur dans le qmake :
j'ai désactivé le precompiled_header mais on peut trouver les fichier projet ici :
http://xinx.shadoware.org/browser/trunk/project.pro
http://xinx.shadoware.org/browser/trunk/project_mode.pro
http://xinx.shadoware.org/browser/trunk/components/component(...)
avec le stable_header.h
http://xinx.shadoware.org/browser/trunk/components/stable_he(...)
[^] # Re: En-tête précompilée
Posté par Gilles G. . Évalué à 1.
tu utilises des directives du type:
MOC_DIR += ./
Tu as essayé ça?
MOC_DIR += .
Bonne chance!
[^] # Re: En-tête précompilée
Posté par phoenix (site web personnel) . Évalué à 1.
C'est ca le problème :
J'ai remplacé
UI_DIR = ./
MOC_DIR = ./
par un
win32 {
UI_DIR = ./
MOC_DIR = ./
}
et le problème est résolu.
J'en ai besoin car sinon sous windows, il me compile ça dans un dossier debug ou release .... alors que sous Linux, il le met dans le dossier ou se trouve le projet.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.