make
DESCRIPTION
make. Presentació desenvolupada al Departament d’Arquitectura de Computadors com a Projecte de Millora Docent (curs 2000-01). Introducció. Aquesta presentació explica la utilitat i el funcionament de l’eina make S’assumeix que ja saps compilar i muntar - PowerPoint PPT PresentationTRANSCRIPT
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
1
Presentació desenvolupada al Departament d’Arquitectura de Computadors com a Projecte de Millora Docent (curs 2000-01)
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
2
Introducció
• Aquesta presentació explica la utilitat i el funcionament de l’eina make
• S’assumeix que ja saps compilar i muntar
• Pots seguir la presentació de dues formes:– Nivell bàsic: Es descriu la utilitat de l’eina i les
seves característies més importants– Nivell avançat: S’expliquen aspectes com els
objectius estàndar, paràmetres de make, ...
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
3
Índex (nivell bàsic)
• Pots seguir la presentació seqüencialment o anar directament al punt que vulguis:– Descripció del problema– Interfície de l’eina i fitxer de dependències– Exemples– Variables– Errors típics
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
4
Problema
• Hi ha programes amb molts fitxers font(102)
Escriure comandes per a compilar i muntar tots aquests fitxers és laboriós
• Al desenvolupar/mantenir un programa només modifiquem alguns fitxers
Si els recompilem tots desaprofitem CPU
Si recompilem selectivament és fàcil errar
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
5
Solució: eina make
• make és una eina per facilitar l’actualització de fitxers executables Només regenera els fitxers desfasats
Automatitza la detecció de fitxers desfasats
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
6
Interfície de l’eina make
• Fitxer de dependències– Per defecte es diu Makefile o makefile– Indica els fitxers involucrats i les línies de
comandes necessàries per a generar-los
• Opcions a la línia de comandes:make [-f file] [opts] [targets]
-f file i opts: es veuràn més endavant
targets: fitxers a construir
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
7
Fitxer de dependències: regles
• Descriuen dependències entre fitxers• Hi ha una regla per cada fitxer objecte i per
cada fitxer executable• Les regles tenen la següent sintaxi:
target: req1 req2 ... reqn
<TAB>comanda1
...
<TAB>comandam
Línies de comandes (comencen amb tabulador)
Fitxer objectiu
Fitxers requisits
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
8
Exemple
• 3 fitxers font: prog.c, aux.c i aux.h• aux.h és referenciat a prog.c i aux.c• 2 fitxers objectes (prog.o i aux.o) i un
executable (prog)
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
9
prog: prog.o aux.o
ld -o prog prog.o aux.o
prog.o: prog.c aux.h
cc -c prog.c
aux.o: aux.c aux.h
cc -c aux.c
Fitxer makefile de l’exemplePer a generar aux.o cal llegir aux.c i aux.h. La línia de comandes que cal
executar és cc -c aux.c
Per a generar prog cal llegir prog.o i aux.o La línia de comandes que cal executar és ld -o prog prog.o aux.o
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
10
Exemple: representació en arbrede les dependències entre fitxers
prog: prog.o aux.o
cc -o prog prog.o aux.o
prog.o: prog.c aux.c
cc -c prog.c
aux.o: aux.c aux.h
cc -c aux.cprog.c aux.caux.h
prog.o aux.o
progFitxer executable
Fitxers objecte
Fitxers font
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
11
Interpretació de les regles
IF ((target no existeix) OR
(req1 és més recent que target) OR
(req2 és més recent que target) OR
...
(reqn és més recent que target))
THEN executa comanda1 ... comandam
target: req1 req2 ... reqn
<TAB>comanda1
...
<TAB>comandam
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
12
Interpretació fitxer dependències
• S’invoca: make target– Recorregut descendent: de forma recursiva, es
busquen: la regla que defineix target, les que defineixen els seus requisits, les dels requisits dels requisits, ..., fins arribar als fitxers font.
– Recorregut ascendent: s’avaluen les regles on tots els requisits són fitxers font i, de forma recursiva, les regles que vagin tenint tots els requisits avaluats
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
13
prog: prog.o aux.o
cc -o prog prog.o aux.o
prog.o: prog.c aux.c
cc -c prog.c
aux.o: aux.c aux.h
cc -c aux.c
7: Recorregut dels requisits de prog
Continuem amb aux.o
13: Fi de recorregut dels requisits de prog
Com prog no existeix,
s’executa cc -o prog prog.o aux.o
14: Fi d’execució de make
Exemple: Primera compilació
• Suposem que ∄ prog, prog.o ni aux.o• Executem: make prog
prog.c aux.caux.h
prog.o aux.o
prog1: Recorregut dels requisits de prog
Comencem per prog.o2: Recorregut dels requisits de prog.o
Comencem per prog.c3: prog.c és un fitxer font
Tornem a prog.o
4: Recorregut dels requisits de prog.o
Continuem amb aux.h5: aux.h és un fitxer font
Tornem a prog.o
6: Fi de recorregut dels requisits de prog.o
Com prog.o no existeix,
s’executa cc -c prog.c
8: Recorregut dels requisits de aux.o
Comencem amb aux.h
9: aux.h és un fitxer font
Tornem a aux.o
10: Recorregut dels requisits de aux.o
Continuem amb aux.c11: aux.c és un fitxer font
Tornem a aux.o
12: Fi de recorregut dels requisits de aux.o
Com aux.o no existeix,
s’executa cc -c aux.c
• La sortida per stdout haurà estat:prompt$ make prog
cc -c prog.c
cc -c aux.c
cc -o prog prog.o aux.o
prompt$
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
14
• Suposem que ∃ prog, prog.o i aux.o• Executem: make prog
Exemple: modifiquem prog.c
prog: prog.o aux.o
cc -o prog prog.o aux.o
prog.o: prog.c aux.c
cc -c prog.c
aux.o: aux.c aux.h
cc -c aux.c
7: Recorregut dels requisits de prog
Continuem amb aux.o
13: Fi de recorregut dels requisits de prog
Com prog és més antic que prog.o,
s’executa cc -o prog prog.o aux.o
14: Fi d’execució de make
prog.c aux.caux.h
prog.o aux.o
prog1: Recorregut dels requisits de prog
Comencem per prog.o2: Recorregut dels requisits de prog.o
Comencem per prog.c3: prog.c és un fitxer font
Tornem a prog.o
4: Recorregut dels requisits de prog.o
Continuem amb aux.h5: aux.h és un fitxer font
Tornem a prog.o
6: Fi de recorregut dels requisits de prog.o
Com prog.o és més antic que prog.c,
s’executa cc -c prog.c
8: Recorregut dels requisits de aux.o
Comencem amb aux.h
9: aux.h és un fitxer font
Tornem a aux.o
10: Recorregut dels requisits de aux.o
Continuem amb aux.c11: aux.c és un fitxer font
Tornem a aux.o
12: Fi de recorregut dels requisits de aux.o
Com aux.o és més actual que aux.c i aux.h,
no s’executa res.
• La sortida per stdout haurà estat:prompt$ make prog
cc -c prog.c
cc -o prog prog.o aux.o
prompt$
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
15
Variables
• Permeten parametritzar l’escriptura de makefiles. – Assignar valor: nom_var = valor– Referenciar: $(nom_var)
• Tenim accés a totes les variables d’entorn fent $(nom) Exemple: $(HOME)
• Algunes estan predefinides (més endavant es veurà com llistar-les)
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
16
CC = /bin/cc
CFLAGS = -c
prog: prog.o aux.o
$(CC) -o prog prog.o aux.o
prog.o: prog.c aux.c
$(CC) $(CFLAGS) prog.c
aux.o: aux.c aux.h
$(CC) $(CFLAGS) aux.c
Exemple amb variablesSi algun dia volem fer servir un
altre compilador, només cal
modificar aquesta línia.
Si algun dia volem afegir
un flag, només cal modificar
aquesta línia
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
17
Alguns errors típics
• Oblidar el tabulador a l’inici d’una línia de comandes (make donarà el missatge d’error Separator not found)
• Equivocar-se a l’escriure el nom d’una variable (make no dóna cap error)
• Referir-se al home directory utilitzant ~ Cal utilitzar $(HOME)
• Línies llarges amb el símbol \
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
18
Índex (nivell avançat)
• Pots seguir la presentació seqüencialment o anar directament al punt que vulguis:– Objectius all, clean i install– Alguns paràmetres de la comanda make– Execució d’altres comandes– On trobar més informació
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
19
Objectiu all
• Per conveni, construeix tots els executables gestionats al fitxer de dependències
• Els seus requisits són la llista de fitxers executables. No té comandes associades.
• Típicament és la primera regla del fitxer. Per tant, és la que s’executa per defecte.
• Exemple: all: prog1 prog2 prog3
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
20
Objectiu clean
• Per conveni, esborra els fitxers temporals, objectes, llibreries i executables existents
• No té requisits. Per tant, sempre que es demani aquest objectiu s’executaran les comandes associades.
• Exemple:clean:
rm core *.o *.a prog
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
21
Objectiu install
• Per conveni, fa les accions d’instal.lació dels executables generats
• Exemple: copiar l’executable a un directoriinstall: prog
<TAB>cp prog $(HOME)/bin
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
22
Alguns paràmetres de make
make [-f file] [opts] [targets]
-f file: nom del fitxer de dependències
-n: mostra quines comandes invocaria per a construir targets, però no les executa
-i: si make invoca una comanda que finalitza retornant error, make no avorta
-p: mostra variables i regles implícites
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
23
Execució d’altres comandes
• A les línies de comandes d’un makefile podem invocar a qualsevol comanda.
• Exemples: – crear un directori
$(HOME)/dir: mkdir $(HOME)/dir
– passar la data de compilaciò com símbol DATEfile.c: file.o cc -c -DDATE="\"`date`\"" file.c
make V1.0 Set.-2001 Departament d’Arquitectura de Computadors
24
On trobar més informació
• Pàgina de manual de la comanda make man make
• Manual de la comanda make de GNU http://www.gnu.org/manual/make/
• Llibre: “Managing Projects with make, 2nd Edition” Editorial O’Reilly http://www.oreilly.com/catalog/make2/