• Aucun résultat trouvé

17janvier2021 jmfriedt.free.fr J.-MFriedtFEMTO-ST/d´epartementtemps-fr´equencejmfriedt@femto-st.frtransparents`a TD0:Makefile

N/A
N/A
Protected

Academic year: 2022

Partager "17janvier2021 jmfriedt.free.fr J.-MFriedtFEMTO-ST/d´epartementtemps-fr´equencejmfriedt@femto-st.frtransparents`a TD0:Makefile"

Copied!
10
0
0

Texte intégral

(1)

J.-M Friedt

TD0 : Makefile

J.-M Friedt

FEMTO-ST/d´ epartement temps-fr´ equence jmfriedt@femto-st.fr

transparents ` a jmfriedt.free.fr

17 janvier 2021

1 / 10

(2)

J.-M Friedt

Compilation s´ epar´ ee

int main() {...

fonc();

comm();

...

} main.c

void fonc() {...}

fonction.c

void comm() {...

USB_USBTask();

}

communication.c

gcc −c fonction.c gcc −c communication.c gcc −c main.c

main.o fonction.o communication.o

Bibliothèque communication USB (LUFA) gcc −o exec main.o fonction.o communicatin.o −lbiblio

édition de liens (linker)

• S´eparation de groupes de fonctions associ´ees dans des fichiers distincts : lisibilit´e

• S´eparation de l’algorithme (main()) des ressources bas-niveau (comm()) ou traitements (fonc()) : r´eutilisation

• Exploitation de biblioth`eques externes (e.g. communication sur bus USB)

• Pour chaque code source, un fichier d’entˆete avec les prototypes de fonctions : JAMAISde code C dans un.h.

(3)

J.-M Friedt

Compilation s´ epar´ ee

int main() {...

fonc();

comm();

...

} main.c

void fonc() {...}

fonction.c

void comm() {...

USB_USBTask();

}

communication.c

gcc −c fonction.c gcc −c communication.c gcc −c main.c

main.o fonction.o communication.o

Bibliothèque communication USB (LUFA) gcc −o exec main.o fonction.o communicatin.o −lbiblio

édition de liens (linker)

• Code source C→objet :gcc -cavec chemin des fichiers d’entˆetre par-I

• Objets + biblioth`eques→ex´ecutable :gcc *.o -o execavec chemin des biblioth`eques statiques (.a) par-L

• Lien avec une biblioth`eque :-lbibliofait appel `alibbiblio.a

3 / 10

(4)

J.-M Friedt

Makefile : principes

Outil (make) d’automatisation de la s´ equence de compilation selon des r` egles de d´ ependance et de r´ esolution des d´ ependances

• s’appuie sur un script (ASCII) d´ ecrivant les ´ etapes de compilation

• ce script se nomme par convention Makefile ou makefile

• pour un fichier nomm´ e diff´ eremment, make -f fichier

• une r` egle de l’objectif ` a atteindre : all

• chaque r` egle est suivie de : d´ ependances

• chaque r` egle est suivie d’une ou plusieurs lignes pr´ efix´ ees de TAB

1

avec la solution pour passer de la d´ ependance ` a la r` egle

• Example :

programme.o: programme.c

gcc -c programme.c -o programme.o

1. oubli de la tabulation :Makefile:8: *** missing separator. Stop.

(5)

J.-M Friedt

Makefile : introduction

Dans l’exemple pr´ ec´ edent :

a l l : e x e c

e x e c: main . o c o m m u n i c a t i o n . o f o n c t i o n . o

g c c −o e x e c main . o c o m m u n i c a t i o n . o f o n c t i o n . o −L r e p /→

,→b i b l i o −l b i b l i o main . o : main . c

g c c −I r e p / i n c −c main . c f o n c t i o n . o : f o n c t i o n . c

g c c −I r e p / i n c −c f o n c t i o n . c c o m m u n i c a t i o n . o : c o m m u n i c a t i o n . c

g c c −I r e p / i n c −c c o m m u n i c a t i o n . c

• la r`egleall(mot cl´e demake) n´ecessite les objets

• les objets n´ecessitent les codes sources (C)

• tenter de compiler un objet donc le code source n’existe pas :

make: *** No rule to make target ’x.c’, needed by ’x.o’. Stop.

5 / 10

(6)

J.-M Friedt

Makefile : variables

Variables :

• ´eliminer les redondances et les risques d’oubli lors de modifications du Makefile

• r´eutilisation du Makefile (ne changer que la cible)

• passage d’arguments depuis la ligne de commande en shell ( ?=) CFLAGS=−I r e p / i n c

LDFLAGS=−L r e p / b i b l i o −l b i b l i o EXECUTABLE?=e x e c

a l l : $(EXECUTABLE)

$(EXECUTABLE) : main . o c o m m u n i c a t i o n . o f o n c t i o n . o

g c c −o $(EXECUTABLE) main . o c o m m u n i c a t i o n . o f o n c t i o n . o→

,→ $( LDFLAGS ) main . o : main . c

g c c $( CFLAGS ) −c main . c f o n c t i o n . o : f o n c t i o n . c

g c c $( CFLAGS ) −c f o n c t i o n . c c o m m u n i c a t i o n . o : c o m m u n i c a t i o n . c

g c c $( CFLAGS ) −c c o m m u n i c a t i o n . c

valeur par d´efaut de ex´ecutable (exec) peut ˆetre modifi´ee en ligne de commande→

(7)

J.-M Friedt

Makefile : principe

• Automatise la s´ equence de commandes pour compiler un code source

• make ne recompile que les d´ ependances qui sont plus r´ ecentes que les r` egles (bas´ e sur la date de cr´ eation des fichiers) ⇒ gain de temps sur les gros projet (e.g. noyau Linux)

• il existe des g´ en´ erateurs de Makefile : cmake, configure (autoconf/M4) ...

• ajout de r` egles en compl´ ement de all: : habituellement clean, peut ˆ etre flash ...

7 / 10

(8)

J.-M Friedt

Makefile : conclusion

CFLAGS=−I r e p / i n c

LDFLAGS=−L r e p / b i b l i ol b i b l i o MCU=a t m e g a 3 2 u 4

EXECUTABLE?=e x e c a l l : $(EXECUTABLE) . b i n

$(EXECUTABLE) . b i n : main . o c o m m u n i c a t i o n . o f o n c t i o n . o

g c c−o$(EXECUTABLE) main . o c o m m u n i c a t i o n . o f o n c t i o n . o$( LDFLAGS ) o b j c o p y−O b i n a r y $(EXECUTABLE) $(EXECUTABLE) . b i n

main . o : main . c

g c c$( CFLAGS )−c main . c f o n c t i o n . o : f o n c t i o n . c

g c c$( CFLAGS )−c f o n c t i o n . c c o m m u n i c a t i o n . o : c o m m u n i c a t i o n . c

g c c$( CFLAGS )−c c o m m u n i c a t i o n . c c l e a n :

rm ∗. o $(EXECUTABLE) $(EXECUTABLE) . b i n f l a s h :

a v r d u d e−c a v r 1 0 9−b 57 60 0−D−p$(MCU)−P / d e v / ttyACM0−e−U f l a s h : w :$(EXECUTABLE) . b i n

make cleanpour effacer les objets et le r´esultat,make flashpour flasher le microcontrˆoleur

(9)

J.-M Friedt

Makefile : avanc´ e

Des symboles qui facilitent la vie :

• $@ pour la r` egle (cible)

• $? pour les d´ ependances plus anciennes que la cible

• $^ pour toutes les d´ ependances

• $(wildcard *.o) pour toutes les d´ ependances

CFLAGS=−I r e p / i n c

LDFLAGS=−L r e p / b i b l i o −l b i b l i o EXECUTABLE?=e x e c

OBJ=$( w i l d c a r d ∗. c ) a l l : $(EXECUTABLE)

$(EXECUTABLE) : $( OBJ )

g c c −o $@ $( OBJ ) $( LDFLAGS ) c l e a n :

rm ∗. o

Une liste de variables d´ efinies par d´ efaut par make

2

2. www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

9 / 10

(10)

J.-M Friedt

Makefile : exercices

1

Proposez un Makefile capable de compiler un de vos programmes

`

a destination de l’Atmega32U4

2

D´ eplacez la phase d’initialisation de l’Atmega32U4 (code avant while (1) {...}) dans un code source init.c s´ epar´ e du programme principal et modifiez Makefile en cons´ equent.

3

Ajouter la r` egle pour nettoyer le r´ epertoire de travail des fichiers temporaires et de l’ex´ ecutable lors du lancement de la commande make propre

4

Ajouter la r` egles pour transf´ erer l’ex´ ecutable au microcontrˆ oleur par

la commande make ecrit

Références

Documents relatifs

◊ remarque : un repérage complet de M dans l'espace nécessite deux autres coordonnées, mais ceci est équivalent à une description de la courbe parcourue (il faut pour cela

Vous pouvez, si n´ecessaire, admettre le r´esultat d’une question ou d’un exercice pour r´epondre aux suivantes.. Certaines questions sont signal´ees comme

Vous pouvez, si n´ecessaire, admettre le r´esultat d’une question ou d’un exercice pour r´epondre aux suivantes.. Certaines questions sont signal´ees comme

Vous pouvez, si n´ecessaire, admettre le r´esultat d’une question pour r´epondre aux suivantes.. Certaines questions sont signal´ees comme

Question 3 : D´emontrez que votre choix doit se porter sur le billet 2 pour ˆetre sur de gagner par la m´ethode de votre choix1. Exercice 2 Logique propositionnelle :

Vous pouvez, si n´ecessaire, admettre le r´esultat d’une question pour r´epondre aux suivantes. Certaines questions sont signal´ees comme

Nr35B 1 obstacles h > 4m doivent etre situes a plus de 30 fois leur hauteur, classe rugosite < 4 Nr35 1 obstacles h > 2m doivent etre situes a plus de 10 fois leur

Alphonse Verville, à Saint-Jean, Que., le 4 courant, quand vous avez publié une lettre du député de la division Malsonneuve niant l'exactitude du compte rendu de ce discours paru