104Fermer106
PolluxLe 23/03/2005 à 22:54
Uther :
A chaque fois, make verifie si le fichiers qui sont nécéssaires pour construire la cible ont été modifiés.

Nan tongue
Et c'est ca qui est chiant avec les makefiles, c'est que pour pas se planter, il faut faire extrement gaffe a ce qu'on ecrit : la par exemple si module1.c inclut toto.h, alors une modification de toto.h ne reconstruira aucun des fichiers, donc les modifications ne seront pas apparentes dans l'executable produit. Pire : si tu modifies apres module2.c, qui lui aussi utilise toto.h, module2 sera reconstruit, mais pas module1 : resultat, ton programme risque de planter puisque les structures de donnees employees ne seront plus coherentes entre module2 et module1...
Autre exemple, si tu veux rajouter un #define sur la ligne de commande (avec le switch -DFROBNICATOR), tous les fichiers ne seront pas recompiles, parce que le makefile n'est pas marqué en dependance de module1.o ... Donc memes risques d'incoherences/plantages ^^ Encore un autre exemple : tu mets a jour TIGCC, si l'ABI change, tu peux avoir des plantages plus ou moins subtils...

Ensuite meme une fois que tu as tenu compte de tous ces facteurs et fait un zouli makefile tout propre, si tu rajoutes un include et que tu oublies de rajouter la dependance qui-va-bien dans le Makefile, tu vas avoir les memes problemes ; heureusement, il y a des programmes pour faire ca (ca s'appelle makedepend), mais evidemment ca contribue encore a rendre le Makefile encore plus illisible... Et il ne faut pas oublier de faire "make depend" quand tu as modifie ce dont depend un fichier, donc le probleme n'est toujours pas entierement resolu... L'ideal serait de dire que la cible "depend" dépend de tous les fichiers .c/.h utilisés par le projet, et de le mettre en dependance de tous les fichiers .o, mais je ne sais pas si makedepend a une option pour ca ? (j'ai jamais eu le courage de faire les choses aussi bien tongue)

Bref, c'est vraiment penible d'utiliser des Makefiles mal foutus parce que tu vas avoir des pbs difficiles a detecter... Et le pb est encore accentué par le fait que les makefiles, c'est l'apologie de la duplication de code : si 99% des makefiles sont buggés, c'est pas parce que c'est pas possible de faire un makefile correct, c'est parce que c'est pas possible d'utiliser une lib qui, par exemple, ferait les makedepend comme un grand une fois que tu as dit que tu compiles bien des fichiers C et pas du Sindarin... (bon, y a des bloatwares pour faire des scripts de configure et tout ca qui font peut-etre des trucs du genre, mais je me suis jamais aventuré la dedans...)


(bon j'avoue j'ai pas pu me retenir de troller sur la fin, désolé happy)



Bref je crois que c'est un peu overkill, surtout quand on utilise pas des outils Unix (make a le gros avantage d'etre bien integre dans le monde unix), et tout recompiler permet au moins d'etre tranquille si on ne maitrise pas le detail du fonctionnement des makefiles (tant que les temps de compilation restent raisonnables) -- surtout que si a chaque fois que le code plante, on est tenté de faire un "make clean" au cas ou le makefile aurait foiré, on peut pas dire que ca soit plus rapide...