la herramienta make

Post on 23-Jan-2016

32 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

La herramienta make. Cómo leer y modificar un Makefile. > make . busca por “makefile”. busca por “Makefile”. > make  make: *** No makefile found. Stop. > make  make: *** No makefile found. Stop. > make –f mimakefile.mak . objetivo : dependencias. - PowerPoint PPT Presentation

TRANSCRIPT

Área de Instrumentación

INSTITUTO DE ASTROFÍSICA DE

CANARIAS

INSTITUTO DE ASTROFÍSICA DE

CANARIAS

Esperanza PáezInstituto de Astrofísica de Canarias

La herramienta makeLa herramienta make

Cómo leer y modificar un Makefile

Cómo leer y modificar un Makefile

2 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

> make > make > make > make

busca por “makefile”busca por “makefile”busca por “Makefile”busca por “Makefile”

3 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.

4 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

objetivo : dependenciasobjetivo : dependencias

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak

5 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.fmain : main.f

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak

dependeciasdependecias

objetivoobjetivo

6 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.fmain : main.f

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak f77 main.f –o mainf77 main.f –o main

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak f77 main.f –o mainf77 main.f –o main

.f extensión reconocida.f extensión reconocida

sólo si no existe o si antiguosólo si no existe o si antiguo

7 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.fmain : main.f

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak make: ‘main’ is up date.make: ‘main’ is up date.

> make > make make: *** No makefile found. make: *** No makefile found. Stop.Stop.> make –f mimakefile.mak > make –f mimakefile.mak make: ‘main’ is up date.make: ‘main’ is up date.

8 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.f fn1.f fn2.fmain : main.f fn1.f fn2.f

> make > make > make > make

objetivoobjetivo

dependeciasdependecias

9 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.f fn1.f fn2.f

main2 : main2.f fn3.f fn4.f

main : main.f fn1.f fn2.f

main2 : main2.f fn3.f fn4.f

> make > make > make > make

objetivo1objetivo1

objetivo2objetivo2

10 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

> make > make objetivoobjetivo> make main2 > make main2 > make > make objetivoobjetivo> make main2 > make main2

main : main.f fn1.f fn2.f

main2 : main2.f fn3.f fn4.f

main : main.f fn1.f fn2.f

main2 : main2.f fn3.f fn4.f

objetivo1objetivo1

objetivo2objetivo2

11 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o

main.o : main.f

fn1.o : fn1.f

fn2.o : fn2.f

main : main.o fn1.o fn2.o

main.o : main.f

fn1.o : fn1.f

fn2.o : fn2.f

> make > make [objetivo][objetivo] > make > make [objetivo][objetivo]

jerarquía

jerarquía

12 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f

fn1.o : fn1.f

fn2.o : fn2.f

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f

fn1.o : fn1.f

fn2.o : fn2.f

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

línea de comandolínea de comando

13 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f

fn2.o : fn2.f

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f

fn2.o : fn2.f

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

línea de comandolínea de comando

14 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

línea de comandolínea de comando

15 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

línea de comandolínea de comando

ojo con los tabuladoresojo con los tabuladores

16 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

orden shell: sh

división líneas: ‘\’

un comando: ‘;’

una línea: ojo

sin eco: @

orden shell: sh

división líneas: ‘\’

un comando: ‘;’

una línea: ojo

sin eco: @

17 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o[TAB] @ echo “Muevo el ejecutable.”[TAB] @ mv main .. ; ls [TAB] @ cd .. ; \ [RETURN] chmod a+x main

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o[TAB] @ echo “Muevo el ejecutable.”[TAB] @ mv main .. ; ls [TAB] @ cd .. ; \ [RETURN] chmod a+x main

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

orden shell: sh

división líneas: ‘\’

un comando: ‘;’

una línea: ojo

sin eco: @

orden shell: sh

división líneas: ‘\’

un comando: ‘;’

una línea: ojo

sin eco: @

18 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

fn1.o : include.inc

fn2.o : include.inc

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

fn1.o : include.inc

fn2.o : include.inc

> make [objetivo] > make [objetivo] > make [objetivo] > make [objetivo]

repetición de objetivosrepetición de objetivos

19 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

fn1.o fn2.o : include.inc

limpia : [TAB] rm *%

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

fn1.o fn2.o : include.inc

limpia : [TAB] rm *%

> make limpia > make limpia > make limpia > make limpia

podemos agruparpodemos agrupar

objetivo etiquetaobjetivo etiqueta

20 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

todo : libreria.a main limpia

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

fn1.o fn2.o : include.inc

libreria.a : libfn.o[TAB] ar r libreria.a libfn.o

libfn.o : libfn.f[TAB] f77 –O –c libfn.f

limpia :[TAB] rm *%

todo : libreria.a main limpia

main : main.o fn1.o fn2.o[TAB] f77 –O –o main main.o fn1.o fn2.o

main.o : main.f[TAB] f77 –O –c main.f

fn1.o : fn1.f[TAB] f77 –O –c fn1.f

fn2.o : fn2.f[TAB] f77 –O –c fn2.f

fn1.o fn2.o : include.inc

libreria.a : libfn.o[TAB] ar r libreria.a libfn.o

libfn.o : libfn.f[TAB] f77 –O –c libfn.f

limpia :[TAB] rm *%

> make [todo] > make [todo] > make > make libreria.alibreria.a > make > make limpialimpia >>

> make [todo] > make [todo] > make > make libreria.alibreria.a > make > make limpialimpia >>

21 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

nombre = valornombre = valor

> make > make > make > make

macro = se referencia como $(nombre) o ${nombre}

macro = se referencia como $(nombre) o ${nombre}

22 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainOBJS = main.o fn1.o fn2.oINCS = include.inc

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] f77 ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} /home/usuario/bin

main.o : main.f[TAB] f77 ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] f77 ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] f77 ${FFLAGS} –c fn2.f

fn1.o fn2.o : ${INCS}

EXE = mainOBJS = main.o fn1.o fn2.oINCS = include.inc

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] f77 ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} /home/usuario/bin

main.o : main.f[TAB] f77 ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] f77 ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] f77 ${FFLAGS} –c fn2.f

fn1.o fn2.o : ${INCS}

> make > make

> make > make

macros del usuario

macros internas

variables de entorno

línea de ejecución

indefinidas = vacías

macros del usuario

macros internas

variables de entorno

línea de ejecución

indefinidas = vacías

Orden de prioridad:

1) macros internas

2) variables entorno

3) en Makefile

4) línea de ejecución

Orden de prioridad:

1) macros internas

2) variables entorno

3) en Makefile

4) línea de ejecución

23 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainOBJS = main.o fn1.o fn2.oDIR = ${HOME}/bin

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${DIR}

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainOBJS = main.o fn1.o fn2.oDIR = ${HOME}/bin

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${DIR}

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

FFLAGS ignorada

FC = f77 (interna)

podemos FC = f90

make –p

no usar ‘~’ en rutas

FFLAGS ignorada

FC = f77 (interna)

podemos FC = f90

make –p

no usar ‘~’ en rutas

24 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = main.f fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = main.f fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

OBJS = SRCS perosustituyendo ‘.f’ por ‘.o’

OBJS = SRCS perosustituyendo ‘.f’ por ‘.o’

25 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = main.f fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = main.f fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$? = lista de dependencias

$@ = objetivo en comandos

$$@ = objetivo (sólo Unix)

en dependencias

$? = lista de dependencias

$@ = objetivo en comandos

$$@ = objetivo (sólo Unix)

en dependencias

26 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o ${EXE} ${OBJS}[TAB] cp ${EXE} ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$$@.o = main.o$$@.o = main.o

omitimos main.fomitimos main.f

27 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ ${OBJS}[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ ${OBJS}[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$$@.o = main.o$$@.o = main.o

omitimos main.fomitimos main.f

$@ = main$@ = main

28 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c main.f

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$$@.o = main.o$$@.o = main.o

omitimos main.fomitimos main.f

$@ = main$@ = main

$? = main.o fn1.o fn2.o$? = main.o fn1.o fn2.o

29 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c fn1.f

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$$@.o = main.o$$@.o = main.o

omitimos main.fomitimos main.f

$@ = main$@ = main

$? = main.o fn1.o fn2.o$? = main.o fn1.o fn2.o

$? = main.f$? = main.f

30 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c fn2.f

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$$@.o = main.o$$@.o = main.o

omitimos main.fomitimos main.f

$@ = main$@ = main

$? = main.o fn1.o fn2.o$? = main.o fn1.o fn2.o

$? = main.f$? = main.f

$? = fn1.f$? = fn1.f

31 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o fn2.o : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o fn2.o : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

$$@.o = main.o$$@.o = main.o

omitimos main.fomitimos main.f

$@ = main$@ = main

$? = main.o fn1.o fn2.o$? = main.o fn1.o fn2.o

$? = main.f$? = main.f

$? = fn1.f$? = fn1.f

$? = fn2.f$? = fn2.f

32 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c $?

${OBJS} : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c $?

${OBJS} : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

OBJS = fn1.o fn2.oOBJS = fn1.o fn2.o

se desdoblase desdobla

33 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c $?

${OBJS} : include.inc

EXE = mainSRCS = fn1.f fn2.fOBJS = ${SRCS:.f=.o}

FFLAGS = –OLDFLAGS = ${FFLAGS}

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${HOME}/bin

main.o : main.f[TAB] ${FC} ${FFLAGS} –c $?

fn1.o : fn1.f[TAB] ${FC} ${FFLAGS} –c $?

fn2.o : fn2.f[TAB] ${FC} ${FFLAGS} –c $?

${OBJS} : include.inc

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

34 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.f fn2.fINCS = include.incOBJS = ${SRCS:.f=.o}

DIR = ${HOME}/bin

FFLAGS = –OLDFLAGS = ${FFLAGS}

.f.o :[TAB] ${FC} ${FFLAGS} –c $<

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${DIR}

${OBJS} : ${INCS}

EXE = mainSRCS = fn1.f fn2.fINCS = include.incOBJS = ${SRCS:.f=.o}

DIR = ${HOME}/bin

FFLAGS = –OLDFLAGS = ${FFLAGS}

.f.o :[TAB] ${FC} ${FFLAGS} –c $<

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${DIR}

${OBJS} : ${INCS}

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

regla para construir los .o a partir de los .f

regla para construir los .o a partir de los .f

$< = .f más nuevos$< = .f más nuevos

35 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

EXE = mainSRCS = fn1.F fn2.FINCS = include.incOBJS = ${SRCS:.f=.o}

DIR = ${HOME}/bin

FFLAGS = –OLDFLAGS = ${FFLAGS}

.SUFFIXES : .F

.F.o :[TAB] ${FC} ${FFLAGS} –c $<

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${DIR}

${OBJS} : ${INCS}

EXE = mainSRCS = fn1.F fn2.FINCS = include.incOBJS = ${SRCS:.f=.o}

DIR = ${HOME}/bin

FFLAGS = –OLDFLAGS = ${FFLAGS}

.SUFFIXES : .F

.F.o :[TAB] ${FC} ${FFLAGS} –c $<

${EXE} : $$@.o ${OBJS}[TAB] ${FC} ${LDFLAGS} –o $@ $?[TAB] cp $@ ${DIR}

${OBJS} : ${INCS}

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

> touch fn2.f > touch fn2.f > make “FFLAGS = –v –O” > make “FFLAGS = –v –O” f77 –v –O –c fn2.f f77 –v –O –c fn2.f f77 –v –O –o main main.o fn1.o f77 –v –O –o main main.o fn1.o fn2.ofn2.o

añade sufijos a lista de make

añade sufijos a lista de make

36 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

# Name:# makefile## Purpose:# Build and install the IRAFSTAR package.## Type of Module:# Description file for the make utility.## Description:# This description file is used by the make utility to# build the IRAFSTAR package from the distributed # source files, to install the resulting system for use,# and to perform other housekeeping tasks.######################################################### Pathname of the root directory beneath which# other Starlink software is currently installed.STARLINK = /star

# Name:# makefile## Purpose:# Build and install the IRAFSTAR package.## Type of Module:# Description file for the make utility.## Description:# This description file is used by the make utility to# build the IRAFSTAR package from the distributed # source files, to install the resulting system for use,# and to perform other housekeeping tasks.######################################################### Pathname of the root directory beneath which# other Starlink software is currently installed.STARLINK = /star

Makefile de IRAFMakefile de IRAFMakefile de IRAFMakefile de IRAF

37 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

# Pathnames of Starlink sub-directories that may # be referenced when building this package.STAR_BIN = $(STARLINK)/binSTAR_DATES = $(STARLINK)/datesSTAR_DOCS = $(STARLINK)/docsSTAR_ETC = $(STARLINK)/etcSTAR_HELP = $(STARLINK)/helpSTAR_INC = $(STARLINK)/includeSTAR_LIB = $(STARLINK)/libSTAR_SHARE = $(STARLINK)/share

# Pathname of the root directory beneath which the # built files for this package should be installed for# use. This defaults to the user's home directory.INSTALL = $(HOME)

# Pathname of root directory beneath which TCLADAM# is installed. and the version number of TCLTCL_VERS = 8.2TCL_INC_DIR = $(STAR_INC)TCL_LIB_DIR = $(STAR_LIB)

# Pathnames of Starlink sub-directories that may # be referenced when building this package.STAR_BIN = $(STARLINK)/binSTAR_DATES = $(STARLINK)/datesSTAR_DOCS = $(STARLINK)/docsSTAR_ETC = $(STARLINK)/etcSTAR_HELP = $(STARLINK)/helpSTAR_INC = $(STARLINK)/includeSTAR_LIB = $(STARLINK)/libSTAR_SHARE = $(STARLINK)/share

# Pathname of the root directory beneath which the # built files for this package should be installed for# use. This defaults to the user's home directory.INSTALL = $(HOME)

# Pathname of root directory beneath which TCLADAM# is installed. and the version number of TCLTCL_VERS = 8.2TCL_INC_DIR = $(STAR_INC)TCL_LIB_DIR = $(STAR_LIB)

Makefile de IRAFMakefile de IRAFMakefile de IRAFMakefile de IRAF

38 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

# Default macros for compiling C and Fortran source code.CC = c89CFLAGS = -O -I$(TCL_INC_DIR) -I$(STAR_INC)FC = fort77FFLAGS = -O 

# Commands for adding to and extracting from an # archive file (.tar).TAR_IN = tar cvhfTAR_OUT = tar xf

#-------------------------------------------------------------------------------# DEFINE PACKAGE SOURCE FILES.## This section defines the set of source files for# the package. 

# Name of the package as specified in documentation# The value is used in messages from make to the user.PACK_NAME = IRAFSTAR 

# Default macros for compiling C and Fortran source code.CC = c89CFLAGS = -O -I$(TCL_INC_DIR) -I$(STAR_INC)FC = fort77FFLAGS = -O 

# Commands for adding to and extracting from an # archive file (.tar).TAR_IN = tar cvhfTAR_OUT = tar xf

#-------------------------------------------------------------------------------# DEFINE PACKAGE SOURCE FILES.## This section defines the set of source files for# the package. 

# Name of the package as specified in documentation# The value is used in messages from make to the user.PACK_NAME = IRAFSTAR 

Makefile de IRAFMakefile de IRAFMakefile de IRAFMakefile de IRAF

39 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

# C routines required for building the package. This is# just a list of all the C source files.C_ROUTINES = tclAppInit.c tclIrafio.c zfiopr.c

#-------------------------------------------------------------------------------# DEFINE FILES REQUIRED FOR BUILDING# THE PACKAGE.## This section defines the set of files produced from# the source files when the package is built and installed. 

# List of object files produced by compiling the source# code and rules for performing the compilations.OBJECT_FILES = $(C_ROUTINES:.c=.o)  # Use .o, .c, .f, .ifc, .ifl, .shl and .hlp suffix rules..SUFFIXES: .o .c .f .ifc .ifl .shl .hlp 

# Implicit rule..c.o:

$(CC) $(CFLAGS) -c $<

# C routines required for building the package. This is# just a list of all the C source files.C_ROUTINES = tclAppInit.c tclIrafio.c zfiopr.c

#-------------------------------------------------------------------------------# DEFINE FILES REQUIRED FOR BUILDING# THE PACKAGE.## This section defines the set of files produced from# the source files when the package is built and installed. 

# List of object files produced by compiling the source# code and rules for performing the compilations.OBJECT_FILES = $(C_ROUTINES:.c=.o)  # Use .o, .c, .f, .ifc, .ifl, .shl and .hlp suffix rules..SUFFIXES: .o .c .f .ifc .ifl .shl .hlp 

# Implicit rule..c.o:

$(CC) $(CFLAGS) -c $<

Makefile de IRAFMakefile de IRAFMakefile de IRAFMakefile de IRAF

40 Área de InstrumentaciónEsperanza PáezInstituto de Astrofísica de Canarias

######################################################### PRIMARY TARGETS.#

# Rules for extracting source files from the source archive.$(C_ROUTINES) :[TAB] $(TAR_OUT) $(PKG_NAME)_source.tar $@[TAB] @ if test -r $@ ; then ; \ else echo $@ is not in the tar file ; exit 1 ; fi # Rule and dependencies for building the # executable image.aitclsh : $(OBJECT_FILES)[TAB] $(FC) $(FFLAGS) -o $@ \ tclAppInit.o $(STAR_LIB)/tclAdam.o \ tclIrafio.o zfiopr.o \ $(LDFLAGS) -L$(TCL_LIB_DIR) \ -L$(STAR_LIB) \ -ltcl$(TCL_VERS)

######################################################### PRIMARY TARGETS.#

# Rules for extracting source files from the source archive.$(C_ROUTINES) :[TAB] $(TAR_OUT) $(PKG_NAME)_source.tar $@[TAB] @ if test -r $@ ; then ; \ else echo $@ is not in the tar file ; exit 1 ; fi # Rule and dependencies for building the # executable image.aitclsh : $(OBJECT_FILES)[TAB] $(FC) $(FFLAGS) -o $@ \ tclAppInit.o $(STAR_LIB)/tclAdam.o \ tclIrafio.o zfiopr.o \ $(LDFLAGS) -L$(TCL_LIB_DIR) \ -L$(STAR_LIB) \ -ltcl$(TCL_VERS)

Makefile de IRAFMakefile de IRAFMakefile de IRAFMakefile de IRAF

top related