C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Temps de compilation avec C++ sous Linux ?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Xandros
Guest





PostPosted: Thu Aug 04, 2005 6:29 pm    Post subject: Temps de compilation avec C++ sous Linux ? Reply with quote



Bonjour,

Je veux me mettre au C++, j'ai donc acheter un livre sur le C++ (ça
aide) et j'ai installé Anjuta sous Linux Debian.

J'ai un AMD 3000+ avec 1Gho de RAM, donc c'est pas trop une vieux coucou.

J'ai tapé mon premier programme, il fait 10 lignes, un genre de "Hello
World". ça met 3 secondes à compiler et 2 secondes à construire ! je
trouve ça un peu long ? non ?

Le jour où je vais avoir un programme de 1000 lignes, ça va mettre 300
secondes (soit 5 minutes) à compiler + 200 secondes (soit 3 minutes 30)
à construire ? si il faut attendre 8 minutes 30 pour savoir si y a un ug !!!

J'ai bidouillé un peu sous VB et delphi sous Windows et la compilation,
même pour des programmes de + de 1000 lignes était presque instantané.

Alors, y a un bug ? ou bien c'est normal ?

Merci

--
Message envoyé avec Thunderbird
Sous Linux Xandros 3.0 Deluxe
Back to top
Loïc Joly
Guest





PostPosted: Thu Aug 04, 2005 6:48 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote



Xandros a écrit :
Quote:
Bonjour,

Je veux me mettre au C++, j'ai donc acheter un livre sur le C++ (ça
aide) et j'ai installé Anjuta sous Linux Debian.

J'ai un AMD 3000+ avec 1Gho de RAM, donc c'est pas trop une vieux coucou.

J'ai tapé mon premier programme, il fait 10 lignes, un genre de "Hello
World". ça met 3 secondes à compiler et 2 secondes à construire ! je
trouve ça un peu long ? non ?

Un test intéressant et de ne faire tourner que le préprocesseur sur ton
programme. La dernière fois que j'ai regardé, j'obtenais sous VC++ un
fichier d'environ 600 000 lignes, dont 3 à moi...


Quote:
Le jour où je vais avoir un programme de 1000 lignes, ça va mettre 300
secondes (soit 5 minutes) à compiler + 200 secondes (soit 3 minutes 30)
à construire ? si il faut attendre 8 minutes 30 pour savoir si y a un ug
!!!

Qui te fait croire que c'est linéaire ? As-tu fait un programme qui
affiche 2 fois hello world et vu qu'il durait 10s à compiler ?

Le temps de compilation peu devenir un problème, mais je pense que tu en
est bien loin.

Quote:
J'ai bidouillé un peu sous VB et delphi sous Windows et la compilation,
même pour des programmes de + de 1000 lignes était presque instantané.

Le mécanisme d'inclusion est je crois assez différent. Ce qui peut
expliquer beaucoup.

--
Loïc

Back to top
noone@nowhere.com
Guest





PostPosted: Thu Aug 04, 2005 6:49 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote



Xandros a écrit :
Quote:
Bonjour,

Je veux me mettre au C++, j'ai donc acheter un livre sur le C++ (ça
aide) et j'ai installé Anjuta sous Linux Debian.

J'ai un AMD 3000+ avec 1Gho de RAM, donc c'est pas trop une vieux coucou.

J'ai tapé mon premier programme, il fait 10 lignes, un genre de "Hello
World". ça met 3 secondes à compiler et 2 secondes à construire ! je
trouve ça un peu long ? non ?

Le jour où je vais avoir un programme de 1000 lignes, ça va mettre 300
secondes (soit 5 minutes) à compiler + 200 secondes (soit 3 minutes 30)
à construire ? si il faut attendre 8 minutes 30 pour savoir si y a un ug
!!!

J'ai bidouillé un peu sous VB et delphi sous Windows et la compilation,
même pour des programmes de + de 1000 lignes était presque instantané.

Alors, y a un bug ? ou bien c'est normal ?

Merci


si tu veux compiler en ligne de commande tu tapes

g++ ton_fichier.cc -o ton_executable

En fait Anjuta utilises les Autotools (Autoconf, Automake, etc...)
c'est à dire un ensemble de scripts dont l'objectif est entre autre de
ne pas avoir à recompiler des morceaux que tu as déjà compilé (voir
compilation séparée avec l'option -c, utilisation d'un Makefile, etc...)

donc ça n'a rien d'anormal... et ça ne veux pas dire que ça mettra
BEAUCOUP plus de temps pour un programme plus long...

De la doc sur GNU Make et le Makefile
info make
http://gl.developpez.com/tutoriel/outil/makefile/


De la doc sur les Autotools (dans un deuxième temps seulement)
http://www.laas.fr/~sjoyeux/doc/autotools-cours.pdf


Personnellement je te conseille déjà de regarder comment faire un
Makefile basique !

Back to top
noone@nowhere.com
Guest





PostPosted: Thu Aug 04, 2005 6:52 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Quote:
Personnellement je te conseille déjà de regarder comment faire un
Makefile basique !

j'oubliai de dire... savoir faire un Makefile ne sert pas qu'en
programmation... j'en utilise pour faire mes cours avec LaTeX

donc laisse vite tomber ton IDE et passe à un éditeur de texte (Emacs,
XEmacs, vi, etc...) comme ça tu comprendras un peu plus le mécanisme...

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Aug 05, 2005 7:08 am    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

[email]noone (AT) nowhere (DOT) com[/email] wrote:
Quote:
Personnellement je te conseille déjà de regarder comment
faire un Makefile basique !

j'oubliai de dire... savoir faire un Makefile ne sert pas
qu'en programmation... j'en utilise pour faire mes cours avec
LaTeX

Tout à fait. Les makefile pour LaTeX, d'ailleurs, sont assez
particuliers, étant donné que parfois, il faut invoquer LaTeX
plusieurs fois sur la même source pour avoir le bon résultat.
(LaTeX se sert des résultats de la fois avant pour résoudre les
références en avant. Alors, si le numéro de page où se trouve
l'étiquette change, la référence est fausse ; il le signale, et
il faut l'invoquer de nouveau.)

Les make, malheureusement, varient énormement, et écrire un
fichier de make portable est encore plus difficile que d'écrire
du C++ portable. Le make de GNU, d'ailleurs, est un langage en
soit, avec des boucles, des conditionnels...

Quote:
donc laisse vite tomber ton IDE et passe à un éditeur de texte
(Emacs, XEmacs, vi, etc...) comme ça tu comprendras un peu
plus le mécanisme...

Chaque chose dans son temps, j'imagine. Mais c'est vrai qu'on
peut apprendre à faire des make simples sans trop d'effort.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Aug 05, 2005 7:23 am    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Loïc Joly wrote:
Quote:
Xandros a écrit :

Je veux me mettre au C++, j'ai donc acheter un livre sur le
C++ (ça aide) et j'ai installé Anjuta sous Linux Debian.

J'ai un AMD 3000+ avec 1Gho de RAM, donc c'est pas trop une
vieux coucou.

J'ai tapé mon premier programme, il fait 10 lignes, un genre
de "Hello World". ça met 3 secondes à compiler et 2 secondes
à construire ! je trouve ça un peu long ? non ?

Un test intéressant et de ne faire tourner que le
préprocesseur sur ton programme. La dernière fois que j'ai
regardé, j'obtenais sous VC++ un fichier d'environ 600 000
lignes, dont 3 à moi...

C'est l'effet d'avoir rendu les iostream des templates. C'est
notable : quelque soit le compilateur, quand on passe de
l'ancienne version des iostream à la nouvelle, les temps de
compile auguement énormement.

Dans ma bibliothèque, la vaste majorité des fichiers n'utilise
pas les iostream. Et ça compile, sur une machine comme la
sienne, très, très vite.

Un autre phénomène que j'ai constaté, aussi bien sous Linux que
sous Solaris : la première fois que tu invoques le compilateur,
il est assez lent. Ensuite, à condition d'avoir assez de
mémoire, il reste résident en mémoire, et s'invoque beaucoup,
beaucoup plus vite. (Ce qui n'est pas désagréable quand on
récompile une bibliothèque avec environs 700 fichiers source.)

Quote:
Le jour où je vais avoir un programme de 1000 lignes, ça va
mettre 300 secondes (soit 5 minutes) à compiler + 200
secondes (soit 3 minutes 30) à construire ? si il faut
attendre 8 minutes 30 pour savoir si y a un ug !!!

Qui te fait croire que c'est linéaire ? As-tu fait un
programme qui affiche 2 fois hello world et vu qu'il durait
10s à compiler ?

Le temps de compilation peu devenir un problème, mais je pense
que tu en est bien loin.

J'ai bidouillé un peu sous VB et delphi sous Windows et la
compilation, même pour des programmes de + de 1000 lignes
était presque instantané.

Le mécanisme d'inclusion est je crois assez différent. Ce qui
peut expliquer beaucoup.

En partie. Et surtout pour les petits programmes. Pour une
petite compilation comme la sienne, la facteur limitante est la
bande passante des accès disques. Mettre une disque SCSI, par
exemple, améliorera les choses notablement.

Quand on compile un projet complet, avec beaucoup de fichiers
source, et qu'on a assez de mémoire (c'est son cas), Unix arrive
assez bien à garder les secteurs cachés en mémoire. Du coup, la
bande passante du disque joue pour la compilation de la première
module, mais ensuite, c'est d'une rapidité étonnante. (Tant
qu'on est sur les disques locaux, évidemment.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Falk Tannhäuser
Guest





PostPosted: Fri Aug 05, 2005 8:19 am    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
Quote:
Les make, malheureusement, varient énormement, et écrire un
fichier de make portable est encore plus difficile que d'écrire
du C++ portable. Le make de GNU, d'ailleurs, est un langage en
soit, avec des boucles, des conditionnels...

Et malheureusement, on rencontre très souvent des Makefile
écrits de façon non optimale, ce qui empêche make de faire
son boulot correctement et oblige de faire des "clean" régulièrement
si on veut vraiment être sûr que tout est régénéré comme il faut.
Voir "Recursive Make Considered Harmful",
<http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html>

Une alternative intéressante pour le C++ semble le "jam" qui est
utilisé par exemple par Boost. Je n'ai pas encore eu le temps de
le regarder plus en détail, mais j'ai l'impression qu'il fonctionne
vraiment bien (prise en compte automatique des dépendances des
#include, évite de recompiler trop ou pas assez, rapide quand
il n'y a rien à recompiler même sur un grand projet).

Falk

Back to top
news
Guest





PostPosted: Fri Aug 05, 2005 8:30 am    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Xandros wrote:
Quote:
Bonjour,

Je veux me mettre au C++, j'ai donc acheter un livre sur le C++ (ça
aide) et j'ai installé Anjuta sous Linux Debian.

J'ai un AMD 3000+ avec 1Gho de RAM, donc c'est pas trop une vieux coucou.

J'ai tapé mon premier programme, il fait 10 lignes, un genre de "Hello
World". ça met 3 secondes à compiler et 2 secondes à construire ! je
trouve ça un peu long ? non ?

Le jour où je vais avoir un programme de 1000 lignes, ça va mettre 300
secondes (soit 5 minutes) à compiler + 200 secondes (soit 3 minutes 30)
à construire ? si il faut attendre 8 minutes 30 pour savoir si y a un ug
!!!

Ca vient probablement de Anjuta. Rapide test chez moi : 28000 lignes en
1min 30s (linkage compris) sur un amd 1.8Ghz (avec d'autres progs en
train de tourner), mais en utilisant make.
Ecrire son Makefile peut avoir du bon des fois (surtout quand on
apprend). Les autoconf c'est plutot pour la distribution, mais tu n'en
est pas encore la je suppose.

Back to top
Xandros
Guest





PostPosted: Fri Aug 05, 2005 10:52 am    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Bonjour,

Merci à tous pour vos réponses, apparement faire un Makefile peu
optimiser la compilation ?

Je ne sais pas encore ce que c'est qu'un Makefile, j'en suis à la page
47 du bouquin :)

@+
Back to top
Stan
Guest





PostPosted: Fri Aug 05, 2005 11:12 am    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote


"Xandros" <vbload (AT) free (DOT) fr> a écrit dans le message de news:
42f34504$0$22305$8fcfb975 (AT) news (DOT) wanadoo.fr...
Quote:
Bonjour,

Merci à tous pour vos réponses, apparement faire un Makefile peu optimiser
la compilation ?

En évitant de re-compiler les sources qui n'ont pas été modifiés.

Quote:
Je ne sais pas encore ce que c'est qu'un Makefile, j'en suis à la page 47
du bouquin Smile

A supposer que le livre en parle.
Ce ne sera pas le cas si il est consacré uniquement à la programmation.

--
-Stan



Back to top
news
Guest





PostPosted: Fri Aug 05, 2005 12:17 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Xandros wrote:
Quote:
Bonjour,

Merci à tous pour vos réponses, apparement faire un Makefile peu
optimiser la compilation ?

Je ne sais pas encore ce que c'est qu'un Makefile, j'en suis à la page
47 du bouquin Smile

Pour commencer, un Makefile du type

---

prog: prog.o
g++ prog.o -o prog

prog.o: prog.c++
g++ -c prog.cpp

-----

en executant 'make prog', ca devrait aller.
Pour comprendre ce qu'il se passe, voir le manuel (pas la page man) de
make: ftp://ftp.gnu.org/gnu/Manuals/make/html_chapter/make_2.html
entre autres.


Back to top
noone@nowhere.com
Guest





PostPosted: Fri Aug 05, 2005 4:06 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Xandros a écrit :
Quote:
Bonjour,

Merci à tous pour vos réponses, apparement faire un Makefile peu
optimiser la compilation ?

Je ne sais pas encore ce que c'est qu'un Makefile, j'en suis à la page
47 du bouquin :)

@+


Pour comprendre un peu le Makefile je te conseille de faire l'essai
suivant :


1 : faire un hello world classique

// main.cc
#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
cout << "Hello world !" << endl;
return EXIT_SUCCESS;
}


tu peux compiler en tapant en ligne de commande
g++ main.cc -o main

où -o signifie output c'est à dire sortie donc c'est le nom de l'executable

voici le Makefile de base (pas de prérequis)



all:
g++ main.cc -o main



(attention la ligne g++ commence par une tabulation... pas par des
espaces !)

tu compiles en tapant make

2
Le problème : chaque fois que tu tapes make ça recompile (même si tu
n'as pas modifié main.cc)

Il faut donc modifier le Makefile pour indiquer la dépendance à main.cc

tu peux par exemple écrire ça à la place de ton Makefile

main: main.cc
g++ main.cc -o main


tu tape make et ça compile

sans modifier main.cc tu retapes make

make: « main » est à jour.

Donc ça ne compile pas pour rien




3
Tu es un peu feignant et réécrire main.cc et main dans la ligne de
compilation ça te barde donc tu utilises les raccourcis

ton Makefile devient alors

main: main.cc
g++ $< -o $@

(bon je sais les raccourcis ne sont pas très parlant... mais info make
te les donne)

$@ Le nom de la cible
$< Le nom de la première dépendance
$^ La liste des dépendances
$? La liste des dépendances plus récentes que la cible
$* Le nom du fichier sans suffixe


4

Maintenant tu veux que cout << "Hello world !" << endl; soit dans une
fonction

donc dans un premier temps tu écris


#include using namespace std;

void hello(void)
{
cout << "Hello world !" << endl;
}

int main(int argc, char** argv)
{
hello();
return EXIT_SUCCESS;
}

puis tu compiles avec ton Makefile


main: main.cc
g++ main.cc -o main


en tapant make


5.

Tu veux maintenant mettre la fonction hello() dans un autre fichier

Dans un premier temps on va la mettre dans le même fichier mais à la fin

#include using namespace std;

void hello(void);

int main(int argc, char** argv)
{
hello();
return EXIT_SUCCESS;
}

void hello(void)
{
cout << "Hello world !" << endl;
}


puis tu compiles avec ton Makefile


main: main.cc
g++ main.cc -o main

en tapant make

6. on peut maintenant mettre tout ça dans 3 fichiers

main.cc hello.cc hello.h

//main.cc
#include using namespace std;

#include "hello.h"

int main(int argc, char** argv)
{
hello();
return EXIT_SUCCESS;
}


//hello.h
void hello(void);

//hello.cc
#include <iostream>
using namespace std;

void hello(void)
{
cout << "Hello world !" << endl;
}


Tu peux alors compiler ***séparémement*** main.cc et hello.cc (avec
l'option -c de gcc)

Regarde !

g++ main.cc -c

donne un fichier objet main.o

g++ hello.cc -c

donne un fichier objet hello.o

Il ne reste plus qu'à les lier

g++ hello.o main.o -o main

et l'executable main (-o = output = sortie)

../main permet d'executer


Maintenant regardons le Makefile


main: main.o hello.o
g++ $^ -o $@

main.o: main.cc
g++ $< -c

hello.o: hello.cc
g++ $< -c


Il suffit de taper make et ça roule... ;-)

ça compile main.cc pour faire main.o
ça compile hello.cc pour faire hello.o
ça link hello.o et main.o pour faire l'executable main


Et voila... ton premier Makefile de base... plus d'info sur le net...


@+

Back to top
noone@nowhere.com
Guest





PostPosted: Fri Aug 05, 2005 5:54 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote


j'ai oublié de préciser
les autotools permettent de créer automatiquement un Makefile

Une fois que tu as pris ça en main tout logiciel se compile et
s'installe via les 3 "fameuses" commandes Linux

../configure
make
make install


en fait

c'est plutôt

su (pour devenir root) puis
make install

configure permet de créer le Makefile (après vérification des
bibliothèques nécessaires, de la présence du compilateur, etc...)

make interprète le Makefile pour compiler le programme

make install : installe le programme


ensuite comme les autotools sont assez standard (sous Linux) il est même
possible de transformer automatiquement tes sources en paquet logiciel
binaire (.rpm ou .deb)

donc Autotools... c'est l'étape suivante... mais il faut déjà faire plus
qu'un Hello World pour que ça soit rentable ;-)

En plus je pense que ça devient un peu HS ici...
Back to top
Falk Tannhäuser
Guest





PostPosted: Fri Aug 05, 2005 11:09 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

[email]noone (AT) nowhere (DOT) com[/email] wrote:
Quote:
6. on peut maintenant mettre tout ça dans 3 fichiers

main.cc hello.cc hello.h

//main.cc
#include using namespace std;

#include "hello.h"

int main(int argc, char** argv)
{
hello();
return EXIT_SUCCESS;
}


//hello.h
void hello(void);

//hello.cc

J'ajouterais ici
#include "hello.h"
ce qui permet au compilateur de vérifier la cohérence entre la
déclaration et la définition de la fonction hello().

Quote:
#include using namespace std;

void hello(void)
{
cout << "Hello world !" << endl;
}


Tu peux alors compiler ***séparémement*** main.cc et hello.cc (avec
l'option -c de gcc)

Regarde !

g++ main.cc -c

donne un fichier objet main.o

g++ hello.cc -c

donne un fichier objet hello.o

Il ne reste plus qu'à les lier

g++ hello.o main.o -o main

et l'executable main (-o = output = sortie)

./main permet d'executer


Maintenant regardons le Makefile


main: main.o hello.o
g++ $^ -o $@


Puis il faut ajouter le fichier hello.h à la liste des dépendances
des .o car une modification de ce fichier nécessite une récompilation:
Quote:
main.o: main.cc
main.o: main.cc hello.h
g++ $< -c

hello.o: hello.cc
hello.o: hello.cc hello.h
g++ $< -c

Dans les grands projets, avec des centaines des fichiers #include
directs et indirects, la génération manuelles des dépendances devient
vite ingérable. Heureusement, et capable de les générer, il suffit
de lui passer l'option -M (ou -MM, ce qui est normalement suffisant).

Falk

Back to top
Fr@d
Guest





PostPosted: Sat Aug 06, 2005 1:30 pm    Post subject: Re: Temps de compilation avec C++ sous Linux ? Reply with quote

Merci beaucoup pour ces infos, même si je n'ai pas tout compris.

le C++ ça a l'air complexe quand même ? non ?


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.