A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Formação Makefiles Ricardo Miranda Guillaume Riflet.

Apresentações semelhantes


Apresentação em tema: "Formação Makefiles Ricardo Miranda Guillaume Riflet."— Transcrição da apresentação:

1 Formação Makefiles Ricardo Miranda Guillaume Riflet

2 Sumário 1. Interesse e objectivos das makefiles 2. Invocar o compilador da linha de comando 3. Hello world 4. Criação da Makefile para o Hello world 5. Hello world II (com dependências) 6. Criação da Makefile para o Hello world II 7. Criação da Makefile para o Hello world II com variáveis e regras implicitas 8. Hello world III (compilar bibliotecas) 9. Criação da Makefile para o Hello world III 10. Descrição da Makefile do Mohid 11. Referências e convenções

3 Interesse e objectivos das makefiles Permite gerir programas grandes e complexos Permite gerir programas grandes e complexos Permite recompilar apenas as partes do código que mudaram Permite recompilar apenas as partes do código que mudaram Não necessita reconfigurar a IDE (os famigerados powerpoints de configuracao...) Não necessita reconfigurar a IDE (os famigerados powerpoints de configuracao...)

4 Invocar o compilador (algumas noções) 1. Compiler stage: o código (C, F90 etc) é convertido em código assembler (.S). 2. Assembler stage: O código assembler é convertido em código objecto (.o) i.e. linguagem máquina – que é legível pela máquina. 3. Linker stage: a étapa final da compilação consiste em colar os vários objectos que compõem o programa e em ligá-lo às bibliotecas que contém funções pré-definidas (HDF5, netcdf etc..). O resultado é um ficheiro executável! O comando é simplesmente cc file.c

5 Hello world! ifort foo.f90 foo.f90 foo.f90 program hello print*,"Hello World!" end program hello ifort –c foo.f90 ifort foo.o

6 Makefile para Hello world! all: ifort foo.f90 foo.exe : ifort foo.f90 RULE: RULE: Target : Dependencies... Commands... foo.exe : foo.o ifort foo.o foo.o : foo.90 ifort –c foo.f90 Insert a tab!

7 Hello world !! (dependências) ifort foo.f90 a.f90 foo.f90 foo.f90 program foo Use a Call printit end program foo ifort –c a.f90 ifort –c foo.f90 ifort foo.o a.o a.f90 a.f90 module a contains subroutine printit print*,"Hello World!!" end subroutine printit end module a ifort a.f90 foo.f90 ? ifort –c foo.f90 ifort –c a.f90 ifort foo.o a.o ?

8 Algumas noções de compilação II Árvore de dependências Compilando vários ficheiros O comando é simplesmente cc file.c blue.c O comando é simplesmente cc file.c blue.c

9 Makefile para Hello world !! (dependências) foo.exe : ifort a.f90 foo.f90 RULE: RULE: Target : Dependencies... -Commands... foo.exe : foo.o a.o ifort foo.o a.o foo.o : foo.f90 ifort –c foo.f90 a.o : a.f90 ifort –c a.f90 Ignora erros foo.exe : foo.o a.o ifort foo.o a.o foo.o : a.o foo.f90 ifort –c foo.f90 a.o : a.f90 ifort –c a.f90 ?

10 Patternized rules (GNU make) foo.exe : foo.o a.o ifort foo.o a.o foo.o : a.o foo.f90 ifort –c foo.f90 a.o : a.f90 ifort –c a.f90 foo.exe : foo.o a.o ifort foo.o a.o %.o : %.f90 ifort –c $< foo.o : a.o wildcard! RULE: RULE: Target : Dependencies... -Commands... Ignora erros

11 Variáveis foo.exe : foo.o a.o ifort foo.o a.o %.o : %.f90 ifort –c $< foo.o : a.o SRCS = foo.f90 a.f90 OBJS = $(SRCS:.f90=.obj) foo.exe : $(OBJS) ifort $^ %.obj : %.f90 ifort -c $< foo.obj : a.obj RULE: RULE: Target : Dependencies... -Commands... Ignora erros

12 Hello world !!! (Bibliotecas) foo.f90 foo.f90 program foo Use a Use b Use hdf5 Call printit Call printthis end program foo Ifort –c b.f90 ifort –c a.f90 ifort –c foo.f90 ifort foo.o a.o b.o b.f90 b.f90 module b contains subroutine printthis print*,This!!" end subroutine printthis end module b ifort –c b.f90 ifort –c a.f90 ar rc ab.lib a.o b.o Ifort –I../libs –c foo.f90 ifort foo.o ab.lib../libs/hdf5.lib

13 Makefile para Hello world !!! (Bibliotecas) RULE: RULE: Target : Dependencies... @Commands... Não faz output do comando SRCS = foo.f90 a.f90 b.f90 OBJS = $(SRCS:.f90=.obj) LIBS = ab.lib../Libs/hdf5.lib foo.exe : foo.obj ifort $^ %.obj : %.f90 ifort –I../Libs –c $< foo.obj : $(LIBS) ab.lib : a.obj b.obj ar rc $@ $^ ifort –c b.f90 ifort –c a.f90 ar rc ab.lib a.o b.o Ifort –I../libs –c foo.f90 ifort foo.o ab.lib../libs/hdf5.lib

14 O comando make Make target Make target Make –C subdir target Make –C subdir target Make –f filename target Make –f filename target

15 Referências e convenções GNU make http://www.gnu.org/software/make/manual/make.htmlhttp://www.gnu. org/software/make/manual/make.html GNU make conventions Um tutorial popular: http://www.eng.hawaii.edu/Tutor/Make/1.html SHELL=/bin/sh.phony: all clean install all: builds the project clean: cleans the project Install: installs the project


Carregar ppt "Formação Makefiles Ricardo Miranda Guillaume Riflet."

Apresentações semelhantes


Anúncios Google