25
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

  • Upload
    melora

  • View
    35

  • Download
    1

Embed Size (px)

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 Presentation

Citation preview

Page 1: make

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)

Page 2: make

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

Page 3: 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

Page 4: make

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

Page 5: make

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

Page 6: make

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

Page 7: make

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

Page 8: make

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)

Page 9: make

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

Page 10: make

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

Page 11: make

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

Page 12: make

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

Page 13: make

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$

Page 14: make

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$

Page 15: make

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)

Page 16: make

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

Page 17: make

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 \

Page 18: make

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ó

Page 19: make

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

Page 20: make

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

Page 21: make

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

Page 22: make

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

Page 23: make

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

Page 24: make

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/

Page 25: make

make V1.0 Set.-2001 Departament d’Arquitectura de Computadors

25

Comentaris: [email protected]