#Pr‚sentation de certaines capacit‚s du make Solucorp #Solutionne la limitation des lignes de commande DOS # Cela indique comment cr‚er un fichier de commandes, comment ins‚rer # des caractŠres de continuation, et comment appeler l'utilitaire. # A partir de maintenant cc et lib accepteront des commandes de # n'importe quelle longueur. .indir.cc = c:\cc.$$$ @c:\cc.$$$ .indir.lib = c:\lib.$$$,& @c:\cc.$$$ #R‚sout la limite de 640k s‚lectivement. # Cela indique … make qu'il doit lib‚rer le maximum de m‚moire # pour l'ex‚cution de la commande cc make proto. .huge = cc make proto naperm #D‚finition de macros # La macro SOURCE contiendra la liste de tous les fichiers .c du # r‚pertoire courant … l'exception du fichier main.c SOURCE ? *.c -main.c # Options du compilateur pour tous les fichiers .c CFLAGS = -O # Options du compilateur pour certains fichiers .c # Voir le commentaire dans la rŠgle .c.$(OBJEXT) plus bas source2.CFLAGS = -n # La macro DIROBJ contiendra un path. Ce path sera un des trois # possibles. Le premier qui existe sera choisi. DIROBJ | c:\obj d:\obj . #Controle l'accŠs. # Cela indique o— sont situ‚s et o— seront produits les fichiers # objets (.obj). .path.obj = $(DIROBJ) # Cela indique o— sont les fichiers d'inclusion. Requis pour # r‚soudre les tests de d‚pendances. .path.h = . ..\include \compiler\include #Voici les rŠgles g‚n‚rales pour rebatir une librairie. # Le pr‚processeur est utilis‚ pour cr‚er un makefile portable. !if $d(MSDOS) OBJEXT = obj # Extension des fichiers objets sous MSDOS LIBEXT = lib # Extension des libraries sous MSDOS !else OBJEXT = o # Extension des fichiers objets sous UNIX LIBEXT = a # Extension des librairies sous UNIX !endif #RŠgle implicite pour la compilation .c.$(EXTOBJ): # G‚n‚ralisition de l'usage des macros: Orient‚ objet # $& correspond au nom du module courant # $($&.CFLAGS) correspond au options applicable au module courant cc -c $($&.CFLAGS) $(CFLAGS) $&.c #RŠgles g‚n‚rales # lib.? est cr‚‚ … partir des fichiers objets, et non pas des fichiers .c # La macro SOURCE contient une liste de .c. Il faut transformer # cette liste en .obj (.o sous UNIX). Une syntaxe permet de r‚viser # temporairement la liste. # La macro pr‚d‚finie $? permet de mettre … jour la librairie # avec seul les fichiers .obj (ou .o) plus r‚cent qu'elle. lib.$(LIBEXT): $(SOURCE:%b.$(OBJEXT)) # V‚ritable sous-routine, voir !define lib plus bas !use lib $< "$?" #Pr‚paration de la documentation. # Voici la s‚quence qui a ‚t‚ utilis‚ pour produire les fichiers # pr‚sent‚s dans document.exm. doc: proto -cod -fxsys.nap *.c # Produit xsys.nap naperm xsys.nap xsys.nai xsys.nas xsys.nah nadoc xsys.doc xsys.nap xsys.ref # Produit le manuel de r‚f‚rence #Cr‚ation du fichier de d‚pendance pour les fichiers d'inclusion # Le fichier makefile.dep est cr‚‚ en balayant tous les sources # du r‚pertoire courant. Ce fichier est silencieusement interpr‚t‚ # par make pour ‚tablir les d‚pendances entre les sources # et les fichiers d'inclusion. dep: makedep makefile *.c # Sous-routine. Cl‚ de la portabilit‚ des makefiles !define lib libnom objets !if $d(MSDOS) # Un "-+" est ajout‚ devant chaque .obj lib $(libnom) $(objets:-+%s) !else ar $(libnom) $(objets)#R‚vise lib.a sous UNIX ranlib $(libnom) !endif !enddef