Herramientas de construcción ( Build )

download Herramientas de construcción ( Build )

If you can't read please download the document

  • date post

    10-Jan-2016
  • Category

    Documents

  • view

    25
  • download

    1

Embed Size (px)

description

Herramientas de construcción ( Build ). Utilidad ‘make’ y similares. Contenido. Objetivo y funciones Proceso de compilación y montaje Dependencias y regeneración selectiva Makefile Aplicaciones Generación automática de dependencias Limitaciones de ‘make’ - PowerPoint PPT Presentation

Transcript of Herramientas de construcción ( Build )

  • Herramientas de construccin (Build)Utilidad make y similares

  • ContenidoObjetivo y funcionesProceso de compilacin y montajeDependencias y regeneracin selectivaMakefileAplicacionesGeneracin automtica de dependenciasLimitaciones de makeOtras herramientas de construccin

  • Objetivo y funcionesObjetivo:Generar o actualizar automticamente ficheros dependientes de otros, de forma selectivaModo de operacin:Compara la fecha de actualizacin de cada fichero con la de los que depende, y si est anticuado lo regeneraAplicacin tpica:Compilacin y montaje de programas

  • Compilacin y montajeInicialmente hay que compilar todogcc -c alfa.c -o alfa.oalfa.calfa.obeta.cbeta.ogcc -c beta.c -o beta.ogcc -o prog alfa.o beta.oprog

  • Recompilacin selectivaPosteriormente slo se recompila lo que cambiagcc -c alfa.c -o alfa.oalfa.c alfa.obeta.cbeta.ogcc -o prog alfa.o beta.oprog* = modificado***

  • Recompilacin selectivaPosteriormente slo se recompila lo que cambiaalfa.c alfa.obeta.cbeta.ogcc -c beta.c -o beta.ogcc -o prog alfa.o beta.oprog** = modificado**

  • Comparacin de fechasProceso automtico, comparando fechasalfa.c alfa.obeta.cbeta.ogcc -c beta.c -o beta.ogcc -o prog alfa.o beta.oprog12.3012.0112.0011.1512.0212.3112.32

  • Dependencias mltiplesPrograma modular, jerarquizado

  • Dependencias mltiplesDependencias entre ficheros

  • Dependencias mltiplesSi cambia algo, se recompila lo que depende de l

  • Dependencias mltiplesSi cambia algo, se recompila lo que depende de l

  • Utilidad makeAutomatiza el proceso de regeneracin selectivaDetecta los ficheros no actualizados mediante la comparacin de fechasNecesita informacin de las dependencias entre ficheros y las acciones para regenerarlosEsta informacin se suministra en un fichero denominado genricamente makefile, usando una notacin especfica, basada en reglasCada regla contiene las dependencias de un fichero respecto a los dems, y las acciones para regenerarlo

  • makefileRegla = dependencias + acciones objetivo: dependencia dependencia ... accion accion. . .objetivo: dependencia ... accion. . .

    Nota: el smbolo es el carcter de tabulacin

  • Ejemplo de makefileajustar: ajustar.o parrafo.o linea.o palabra.og++ -o ajustar ajustar.o parrafo.o linea.o \palabra.o

    palabra.o: palabra.cpp palabra.hg++ -c palabra.cpp -o palabra.o

    linea.o: linea.cpp linea.h palabra.hg++ -c linea.cpp -o linea.o

    . . .

  • Cmo invocar makeDando la orden:make [ -f makefile ] [ opciones ] [ objetivos ]Algunos parmetros:makefile fichero de reglas (por defecto makefile)opcin -k continuar aunque haya erroresobjetivos objetivos a actualizar (por defecto el de la primera regla que haya en el fichero makefile)Ejemplo:make(sin parmetros)Usa el fichero makefile y actualiza el primer objetivo

  • Variables y reglas implcitasVariables toman valores de textoAsignacin: variable = valorUso: $(variable) Reglas implcitas plantillas genricasDependencias usando patrones %.ext1: %.ext2Acciones usando macros$@ - objetivo$< - primera dependencia$? - dependencias modificadas$^ - dependencias (todas)$* - lo que se ajusta al patrn %Las reglas se invocan con una lnea de dependencias que se ajuste al patrn de dependencias

  • Variables y reglas implcitasOBJS = ajustar.o parrafo.o linea.o palabra.o

    ajustar: $(OBJS)g++ -o ajustar $(OBJS)

    %.o : %.cppg++ -c $< -o $@

    palabra.o: palabra.cpp palabra.hlinea.o: linea.cpp linea.h palabra.h. . .

  • Otras aplicacionesCualquier situacin en que unos ficheros se actualizan a partir de otros que cambianHacer copias de backupGenerar formatos finales de documentosActualizar contenido de sitios webEjecutar pruebas de programasRegenerar instalaciones de softwareBorrar ficheros anticuados etc.

  • EjemploBackup/Mirror incremental

    directoriocopia fichero1 fichero1 fichero2 fichero2 fichero3 fichero3

    Situacin inicial

  • EjemploBackup/Mirror incremental

    directoriocopia fichero1 fichero1 fichero2 fichero2 fichero3 fichero3 . . . ficheroN

    Modificado fichero2, nuevo ficheroN

  • EjemploBackup/Mirror incremental

    directoriocopia fichero1 fichero1 fichero2 fichero2 fichero3 fichero3 . . . . . . ficheroN fichero N

    Slo hay que copiar lo que cambia

  • EjemploBackup incremental (1)

    BAK/fichero1: fichero1 copy fichero1 BAK

    BAK/fichero2: fichero2 copy fichero2 BAK. . .

    Rudimentario: hay que nombrar cada fichero

  • EjemploBackup incremental (2)

    copia: *.c *.h copy $? BAKtouch copia

    touch cambia la fecha de actualizacin del fichero que se indique, poniendo la fecha de ese momentocopia es un fichero vaco, que sirve para tener la fecha del ltimo backup

  • Dependencias automticasLa preparacin manual del makefile es laboriosaEs fcil olvidarse de algunas dependenciasSe puede automatizar en parteHay herramientas para analizar las dependenciasPara ello se analizan las directivas #includeUtilidad makedependInvoca el preprocesador y analiza los #includeAade las dependencias el final del makefile, precedidas de la marca:# DO NOT DELETE THIS LINE -- make depend depends on it. Esta marca permite regenerar (reescribir) las dependencias, conservando el resto del makefile.

  • Dependencias automticasCompilador gcc/g++Tiene una capacidad equivalente a makedependSe invoca como gcc MM (o g++ -MM)Escribe las dependencias por la salida estndarEjemplo:g++ -MM *.cpp>ajustar.o: ajustar.cpp palabra.h ...>linea.o: linea.cpp linea.h palabra.h> palabra.o: palabra.cpp palabra.h> parrafo.o: parrafo.cpp parrafo.h linea.h ...

  • Desventajas de makeLa preparacin manual del makefile es laboriosaLa reconstruccin no es seguraNo se detectan cambios hacia atrsPuede ser poco eficienteSe reconstruye aunque no cambien objetivos intermediosReconstruye ms de lo necesario tras ligeros cambios en cabeceras bsicasFicheros makefile poco transportablesLas acciones son especficas para cada plataforma: shell, compilador, etc.

  • Otras herramientas de construccinHay muchas herramientas similares a makeAlgunas muy similaresOtras ms elaboradasEjemplosA-a-p: sencilla de usar, basta la lista de fuentesJam: sencilla de usar (como la anterior)Cook: usa una herramienta separada para las dependencias (c_incl), notacin tipo LispAnt: muy usado con Java, reglas con marcado XMLSCons: reconstruccin ms segura, basado en Python