Upload
laurel
View
30
Download
0
Embed Size (px)
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
Citation preview
Á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} : [email protected] ${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} : [email protected] ${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
[email protected] = [email protected] = 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} : [email protected] ${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} : [email protected] ${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
[email protected] = [email protected] = 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} : [email protected] ${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} : [email protected] ${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
[email protected] = [email protected] = 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} : [email protected] ${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} : [email protected] ${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
[email protected] = [email protected] = 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} : [email protected] ${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} : [email protected] ${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
[email protected] = [email protected] = 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} : [email protected] ${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} : [email protected] ${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
[email protected] = [email protected] = 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} : [email protected] ${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} : [email protected] ${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} : [email protected] ${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} : [email protected] ${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} : [email protected] ${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} : [email protected] ${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} : [email protected] ${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} : [email protected] ${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