Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Temps de compilation avec C++ sous Linux ?

20 réponses
Avatar
Xandros
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

10 réponses

1 2
Avatar
Loïc Joly
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...


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.

--
Loïc

Avatar
noone
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 !

Avatar
noone
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...

Avatar
kanze
wrote:
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...

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


Avatar
kanze
Loïc Joly wrote:

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.)

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


Avatar
Falk Tannhäuser
wrote:
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 f aut.
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

Avatar
news
Xandros wrote:
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.

Avatar
Xandros
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 :)

@+
Avatar
Stan
"Xandros" a écrit dans le message de news:
42f34504$0$22305$
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.

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


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

--
-Stan

Avatar
news
Xandros wrote:
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 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.

1 2