Está en la página 1de 3

Notas 1

ICOM 4015

Prof. Pedro I. Rivera Vega

Segundo Semestre 2002-2003

Universidad de Puerto Rico Recinto Universitario de Mayag uez Departamento de Ingenier a El ectrica y Computadoras Programa de Ingenier a de Computadoras ICOM4015 Notas 11

Archivo Makele 1. Introducci on

y de forma m as sosticada que lo que aqu veremos. Pero lo que veremos nos va a servir por el futuro cercano. Usted debe tratar de ver m as sobre esto, pues mientras m as vea, quiz as, m as se le simplique la vida. Cada vez que se ejecute el comando make, el sistema busca al archivo makefile o Makefile para ver lo que este archivo le est a diciendo. Es en base a lo que se especica en este archivo que el sistema decdir a las acciones a seguir, si alguna.

El archivo makefile (o Makefile), en conjunto con el comando make, nos permite, entre otras cosas, establecer una serie de acciones que se deben seguir para crear una versi on ejecutable de un programa o sistema que consista de varios archivos separados. A trav es de este le decimos al sistema qu e archivos dependen de otros, y le especicamos cu ales. Esto es de importancia para el proceso de compilaci on y producci on nal de versi on ejecutable. La raz on es que normalmente un proyecto consiste de muchos archivos (heading les, librer as, archivos de c odigo, etc.) y no queremos tener que estar pasando por el trabajo de compilarlos uno a uno cada vez que necesitemos hacer la compilaci on. O sea, no queremos tener que escribir cada comando de compilaci on; pero m as a un, no queremos que el sistema tenga que recompilar partes que no hacen falta recompilar. En sistemas grandes y complejos, esto puede representar una gran econom a de tiempo y recursos. Por ejemplo, suponga que se requiera hacerle modicaciones a uno de los archivos particulares en un sistema luego de tener ya una versi on ejecutable (pero que por alguna raz on tenemos que hacerle cambios a la versi on original). En este caso, no necesariamente vamos que tener que recompilar otros archivos que so se vean afectados por ese cambio. En el Makele le decimos al sistema las distintas dependencias entre los archivos en el proyecto. Por ejemplo, un archivo f1.cpp puede incluir archivo f2.h. Pues en este caso, cualquier cambio en f1.cpp o en f2.h va a requerir la recompilaci on de f1.cpp al producir la nueva versi on ejecutable del proyecto. Ese depender de un archivo de otro es parte de lo que le hacemos saber al sistema a trav es del archivo makefile. Realmente podemos usar el archivo makefile, en combinaci on con el comando make para mucho m as
1 //jibaro../icom4015/022/notas/notas001.tex, 17 de enero de 2003, Prof. Pedro I. Rivera Vega

2.

Breves Reglas de Creaci on de makefile

El archivo makefile consiste de una serie de elementos llamados reglas o l neas de dependencia (que especican dependencias) y acciones (que le dicen al sistema qu e hacer si la condici on de la regla aplica. Tambi en se pueden tener variables. Por defecto (default), el comando make va a buscar archivo Makefile. Si no existe archivo con el nombre Makefile, entonces busca archivo con nombre makefile2 . Una vez localizado el archivo correspondiente, el sistema, guiado por sus reglas, har a lo que se le dice que haga si se determina que es necesario. El comando make tambi en puede invocarse con alg un argumento. En particular, podemos indicar un argumento que corresponde a un label de una de las l neas de dependencia en archivo makefile. Si no se le incluye ning un argumento al momento de hacer la invocaci on de este comando, entonces se trabaja como si ese argumento fuera la primer label en el archivo. (vea ejemplo)

2.1.

Comentarios

Podemos incluir comentarios en el archivo makefile. Para esto lo que tenemos que hacer es usar el s mbolo #, a partir del cual se considera que lo que hay es un comentario. El comando make no har a caso a comentarios.

2.2.

Variable

Podemos denir variables, a las cuales se les asigna como valor una secuencia de s mbolos. Esa secuencia de s mbolos que representa en valor de la variable ser an lo que sustituya a la misma en cualquier lugar del archivo en el que se usa la misma.
2 Note la diferencia en la primera letra, may uscula o min uscula

Notas 1

ICOM 4015

Prof. Pedro I. Rivera Vega

Segundo Semestre 2002-2003

Las variables se especican al mismo momento de inicializarlas con una l nea o comando de asignaci on. Por ejemplo, las siguientes l neas inicializan variables.

3.

Ejemplo

Como ejemplo, vamos a estudiar el siguiente archivo makefile. En este caso estamos considerando un caso simple en el que se tiene un programa que maneFLAGSC = -c -g ja n umeros enteros, denidos seg un una clase llamana FLS = -l Entero. El archivo en el que se encuentra el programa Estas dos l neas especican variables con nombre principal, se asume que es main.cpp. La especicaon e interface para la clase Entero se tiene en los FLAGSC y FLS. En futuras l neas de acci on en el ar- ci chivo, las mismas se usan (haci endole referencia a las archivos Entero.h y Entero.cpp. As que tenemos que los archivos mismas) de la forma $(FLAGSC) y $(FLS), respectivamente. Por ejemlo, podemos tener l neas de acciones # Esto es un comentario, pues comienza como las siguientes: # con el simbolo #, el cual indica que # el resto de la linea es comentario. g++ ($FLAGSG) file.cpp ls ($FLS) main: main.cpp Entero.o Las variables se pueden manipular de manera m as g++ -o main main.cpp Entero.o sosticada, pero por ahora, algo como anterior es suciente. Entero.o: Entero.h Entero.cpp g++ -c Entero.cpp En este ejemplo se le est a indicando al sistema que hay dos archivos que dependen de otros, adem as de Las l neas de dependencias comienzan en la columunas reglas que dicen c omo resolver la discrepancia na 1. Consisten de una serie de elementos (normalque el sistema detecta. En el primer caso se indica mente uno solamente) dependientes, separados por que el archivo main depende de los archivos main.cpp espacio. Estos elementos pueden ser nombres de ary Entero.o. Lo que se sigue a esta l nea le indica al chivos (en cuyo caso les llamamos target les) o simsistema la acci on que hay que llever a cabo para replemente alg un label. A estos les sigue el caracter : solver cualquier discrepancia. Las discrepancias sur(doble punto), seguido de una serie de archivos pregen si cualquiera de los archivos a la derecha (en la requisitos (source les) u otras dependencias; estos l nea de dependencia) tienen una versi on m as recienu ltimoa, tambi en separados por espacio. Los llamate que la del archivo a la izquierda. Esto de determidos elementos dependientes dependen de lo que se na autom aticamente examinando la fecha y hora de escriba luego del :. creaci on de cada uno. Todo lo anterior forma lo que llamaremos una reNote tambi en que en el caso del archivo Entero.o gla en una dependencia. Las acciones relativas a una hay otra regla en la que aparece como el archivo deregla en una dependenca le siguen a la misma, pero pendiente. En este caso, se indica que este archivo decomenzando con caracter TAB. Estas acciones le dicen pende de los archivos Entero.h y Entero.cpp. Antes al sistema qu e hacer para poner al d a los target de resolver la regla main, el sistema determina si tieles. ne que resolver cualquier discrepancia entre el archivo Si una estas l neas requiere m as de una l nea f sica Entero.o y cualquiera de los archivos de los que este en el archivo, entonces se le indica escribiendo carac- depende. ter \ al nal. El invocar el comando make tenemos las siguientes As que podemos resumir el formato de una es estas opciones: l neas como sigue: 1. make : En este caso se tiene el mismo efecto que si dependencia : elemento1 ... elementoN escribimos make main. El sistema determina las <TAB> ...commando para la dependencia ... acciones a seguir de la manera en que se explica en lo anterior. Si se requieren varias acciones, entonces se tienen varias l neas de comandos, cada una comenzando con el 2. make Entero.o : En este caso lo que va a hacer el sistema es invocar todas las reglas indicadas caracter TAB (tecla TAB).

2.3.

L neas de Dependencia

Notas 1

ICOM 4015

Prof. Pedro I. Rivera Vega

Segundo Semestre 2002-2003

que sean necesario invocar (segu un lo que le di- a sacar provecho. Por ahora, lo que se da en este cen las dependencias establecidas en el archivo) documento debe servirle de algo. por el sistema para resolver las discrepancias. Si Usted puede encontrar m as informaci on en textos no hay que aplicar ninguna otra regla, pues no o manuales del sistema Linux. se aplica. Note que en este ejemplo, en este caso no se invocar a ninguna otra regla, pues ninguno de los archivos a la derecha en la l nea de dependencia que comienza con Entero.o no encabezan ninguna otra l nea de dependencia. Una adici on que normalmente se hace a casos como este son l neas como las siguientes: clean: /bin/rm *.o # comieza con <TAB> NOTA: Si usted tiene su computadora propia, pero no usa Linux, pero s el sistema Windows, entonces puede buscar un sistema gratuito que debe poder instalar en su sistema sin muchos inconvenientes. Este sistema le va a dar facilidades de programaci on similares a las que tendr a en el sistema Linux (incluyendo compilador de C ++, debugger, editor, etc.). Para informaci on sobre este sistema, incluyendo el c omo obtenerlo, vea Ap endice K (pag. 776) en el libro de texto de la clase.

tarfile: tar -czf ejemplo.tar main main.cpp \ Entero.cpp Entero.h \ makefile # la linea tar ... comienza con # caracter TAB ... es una accion De esta forma, si se le da el comando make clean, como clean es un label que encabeza una l nea de dependencia, en la que no se especica archivo alguno del cual depende) entonces lo que se hace es que se aplica la acci on que sigue. En este caso, dicha acci on es borrar todo archivo que termine en .o. Notar que lo anterior causa que, la pr oxima vez que se invoque el comando make (o make main), como el archivo Entero.o3 no existe (lo cual seria equivalente a que no est a al d a con respecto a los archivos de los que depende) entonces se aplica la acci on o acciones que est an asociadas con la regla de dependencia que comienza con el label Entero.o. Y entonces se produce nueva version del archivo Entero.o4 , lo que eventualmente causa que el archivo main no est e al d a, invocando entonces las acciones que se le indican a la regla main. En el caso en que se le escriba el comando make tarfile entonces lo que se estar a haciendo es invocar las acci on que se indica de crear archivo ejemplo.tar...

4.

Conclusi on

Aqu se les presenta solamente una idea de lo que se puede hacer en un makefile. Hay m as a un. Busque informaci on al respecto y lea, de seguro que le va
3 Vea que la regla de dependencia que comienza con label main indica que este archivo depende del archivo Entero.o 4 Pues se lleva a cabo la acci on g++ -c Entero.cpp.

También podría gustarte