Qt, gcc, header précompilé : ça roxe sa maman [C++] - C++ - Programmation
Marsh Posté le 08-08-2004 à 02:09:18
t'as essayé tout simplement de faire une règle pour les .h comme tu changes rien et ça marche tout seul. pas la peine de faire des très mauvais all.h
Marsh Posté le 08-08-2004 à 02:12:22
ReplyMarsh Posté le 08-08-2004 à 02:17:24
ben tu rajoute un un règle *.gph : *.h ... et 2 bidules dans ton makefile et tout va se faire tout seul, pas la peine de foutre ton projet en l'air avec un daubique all.h
Marsh Posté le 08-08-2004 à 02:18:21
t au courant que gcc ne gère l'utilisation que d'un seul header précompilé ?
Marsh Posté le 08-08-2004 à 02:23:19
sans déconner ? c'est naz ça ... ben alors c'est vraiment de la technologie preview, je vais pas me faire chier à modifier ne serait qu'un seul Makefile ... puisqu'il faut changer toucher aussi au reste. RAB, distcc + ccache powa
Marsh Posté le 08-08-2004 à 02:24:43
Taz a écrit : sans déconner ? c'est naz ça ... ben alors c'est vraiment de la technologie preview, je vais pas me faire chier à modifier ne serait qu'un seul Makefile ... puisqu'il faut changer toucher aussi au reste. RAB, distcc + ccache powa |
évidemment que c'est de la technology preview
il n'empeche, le plus dur a été fait ( maitenant, c'est le travail relou d'implémenter la gestion header par header )
et ccache j'ai testé ça améliore de 0
Marsh Posté le 08-08-2004 à 02:27:13
la première fois ça améliore rien, après, ça marche terrible.
sinon y a peut être moyen de faire un all.pch customisé pour chaque fichier, avec Make ça doit commencer à être chiant, par contre avec d'autres outils ça doit bien se faire je pense
Marsh Posté le 08-08-2004 à 11:01:58
ah tiens ouais ça marche ccache
comment ça fait pour fonctionner ?
c'est vrai que c'est super rapide, tellement ça parait absurde que ce soit pas écrit en gros de l'utiliser avec Qt
A comparer avec l'intéret des headers précompilés, bein le header précompilé, c'est que ça marche dès la première compile
sinon, tu intégres comment ccache toi ?
dans la variable CXX ?
Marsh Posté le 09-08-2004 à 10:05:09
Sous VC++ au moins, on peut pas utiliser les entêtes précompilées avec Qt, car il faut que tous les fichiers utilisent cette entête précompilée, et ce n'est pas le cas des fichiers générés par Qt via la moc. Du coup, su t'utilises Designer et donc moc, ben pas de header précompilé.
Tu peux tout de même améliorer le temps de compile en déclarant les classes dans le .h et en les incluant dans le .cpp au lieu de les inclure dans le .h, quand c'est possible évidemment :
Code :
|
Le gain est d'autant plus appréciable qu'il y a des #include "MyWidget.h" dans ton projet.
Marsh Posté le 09-08-2004 à 10:13:17
helloworld:
c'est toujours comme ça qu'il faut faire et que je fais, hein, dans mes .h, il n'y a que des pré-déclarations de classe.
sinon Qt dans sa version 3.3, bein la doc elle parle bien de VC++, donc ça devrait fonctionner sans probleme
Marsh Posté le 09-08-2004 à 10:28:05
farib a écrit : |
non, j'ai un ~/bin, j'y ai fait des liens
ll ~/bin | grep ccache
lrwxrwxrwx 1 benoit benoit 15 2004-08-09 10:27 c++ -> /usr/bin/ccache*
lrwxrwxrwx 1 benoit benoit 15 2004-05-26 15:21 cc -> /usr/bin/ccache*
lrwxrwxrwx 1 benoit benoit 15 2004-05-26 15:21 g++ -> /usr/bin/ccache*
lrwxrwxrwx 1 benoit benoit 15 2004-05-26 15:21 gcc -> /usr/bin/ccache*
Marsh Posté le 09-08-2004 à 10:51:56
j'ai fait ça et je me mange des files not found quand je fais
"gcc"
Marsh Posté le 09-08-2004 à 11:04:14
benoit@athlon >>> which gcc
/home/benoit/bin/gcc
[11:03:50][pts/1][~/tmp/broadcastavenue.com/StarCraft][#14][&0]
benoit@athlon >>> gcc --version
gcc (GCC) 3.3.4 (Debian 1:3.3.4-7)
Copyright (C) 2003 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS
GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.
t'es sur de l'emplacement de ton ccache ?
Marsh Posté le 09-08-2004 à 11:40:05
farib a écrit : sinon Qt dans sa version 3.3, bein la doc elle parle bien de VC++, donc ça devrait fonctionner sans probleme |
parler de VC++... le probleme il est pas là, biensûr qu'on peut utiliser Qt avec VC++. Mais je n'ai pas réussi (et je suis pas le seul) à utiliser les entêtes précompilées dans un projet avec des fichiers générés par moc. Il faudrait une option dans moc qui permette d'ajouter un include (=> l'include précompilé), option qui n'existe pas à ma connaissance. Sinon il faut bidouiller...
Je n'ai jamais utilisé les pch avec g++, je ne sais pas si l'inclusion du pch dans chaque fichier source est obligatoire ou non.
Marsh Posté le 09-08-2004 à 12:50:51
euh y'a rien qui change entre visual et gcc hein
les moc y'en a tout le temps
je vois ce que tu veux dire
mais si j'ai dans un .moc
Code :
|
en fait ça sera bon
dans le paramballs.h j'ai le include all.h qui contient déja
#include <qmetaobject.h>
#include <qapplication.h>
et grace aux #ifdef, les #include du .moc seront ignorés.
taz : tu peux me faire un ls -l /usr/bin/gcc & g++
Marsh Posté le 09-08-2004 à 15:17:22
Et comment tu fais rajouter ton #include "paramballs.h" par moc ?
et même ça marche pas, paramballs.h doit être le fichier précompilé. La première ligne de ton cpp doit être #include "all.h"
Je rappelle que les fichiers moc sont générés par moc.exe, donc si toi tu modifies le fichier généré, celui-ci sera tot ou tard effacé et regénéré par moc et tes modifs seront perdues.
Marsh Posté le 09-08-2004 à 15:51:05
moc_paramballs.cpp contient TOUJOURS #include "paramballs.h" ( c'est généré comme ça
le paramballs.h contient lui un #include "all.h"
Marsh Posté le 09-08-2004 à 16:10:45
farib a écrit : moc_paramballs.cpp contient TOUJOURS #include "paramballs.h" ( c'est généré comme ça |
ah... j'avais pas vu le "moc_" devant... donc "moc_XXX.cpp" contient toujours "#include "XXX.h"". Je suis d'accord. Mais ça n'aide pas. J'ai un fichier précompilé, all.h, qui doit toujours être inclu en premier :
Code :
|
Les pch, sous VC++ du moins, ça marche comme ça. Le pch ne doit pas être inclu dans des .h mais dans des .cpp avant les .h associé.
Y'a une méthode automatique aussi, mais j'ai jamais testé.
Marsh Posté le 09-08-2004 à 17:22:53
hum, tu penses pas que ça n'a pas d'importance que le pch/header soit inclut dans le moc ou pas ?
au premier parsage du préprocesseur, il incluera le .h.
il finira bien par réinclure le all.h
c'est si important que cela ?
Marsh Posté le 09-08-2004 à 17:42:25
farib a écrit : hum, tu penses pas que ça n'a pas d'importance que le pch/header soit inclut dans le moc ou pas ? |
c'est pas ce que je pense qui est important, mais comment VC++ gère le truc, et ça se passe comme ça. Sinon c'est :
Citation : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé |
Marsh Posté le 09-08-2004 à 17:51:46
arf, ouais, avec g++ c'est pas comme ça
cela dit, dans la doc de qt, y'a des exemples explicite sur comment faire un .pro pour qmake qui prenne en compte les headers précompilés sous Windows/VC++
ça marche po ça ?
http://doc.trolltech.com/3.3/qmake-manual-7.html
Marsh Posté le 08-08-2004 à 01:30:30
les headers précompilés, ça change un peut tout dans la compilation des programmes c++ et Qt, c'est carrément un pas de géant pour l'humanité
sur mon petit prog de merde la ( le raytracer )
temps de compilation (XP 1700+)
___
projet original
make 45,95s user 2,16s system 83% cpu 57,713 total
__
projet remanié avec tous les headers "fixes" dans le all.h.
Les headers STL, iostream & co.
Les headers Qt, qlabel.h, qwidget.h, & co
En effet, gcc ne sait utiliser, pour l'instant, qu'un seul header précompilé, bon en pratique, ca marche très bien, on bourrinne tout dans le all.h
make 63,85s user 2,68s system 92% cpu 1:11,73 total
__
projet utilisant le all.h précompilé
make 12,70s user 1,29s system 88% cpu 15,873 total
__
La précompilation du header all.h, qui contient TOUS les include QT & STL prend elle 8 secondes...
__
maintenant, je compare sur un seul fichier, quand on modifie un fichier simple et qu'on recompile de suite pour tester
sur un fichier qui avait gardé ses headers nécessaires strictement ( pas le all.h)
make 3,39s user 0,21s system 94% cpu 3,791 total
avec header all.h précompilé
make 0,89s user 0,11s system 96% cpu 1,038 total
____
hébé, dire qu'on s'est fait chier pendant tout ce temps là à attendre que Qt & M. C++ prenne son temps...
A noter, j'ai pas réellement insisté, mais j'ai pas réussi à faire prendre en compte le header précompilé à qmake ( alors qu'il est sensé le gérer ) et du coup j'ai modifié le makefile à la mano, mais c'est pas super grave.
Ca va etre moins ridicule que la compilation sous visualC++, maintenant.
Message édité par farib le 08-08-2004 à 01:36:35
---------------
Bitcoin, Magical Thinking, and Political Ideology