UTNianos

Versión completa: [AYUDA] makefile
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos. Necesito que alguien me ayude a hacer un makefile o que me expliquen porque no lo entiendo bien y nose como se usa.

Desde ya, muchas gracias!!!!!

saludos.
Te dejo uno, debería andar...
Si no avisame!




//Donde pongo Nombre pone algun identificador y el mismo en todos los lugares donde pongo "nombre"
//Donde dice nombre_xxx pone también algún nombre, yo ponía el de mi carpeta.


CC=gcc
CFLAGS=-c -g
nombre_xxxOBJS= //acá van los .O cuando pases a otra línea agrega: \ y agrega los de todos tus archivos.

nombre: $(nombre_xxxOBJS)
@echo compilando nombre
$(CC) $(nombre_xxxOBJS) -o $@
@echo fin




%.o: %.c
$(CC) $(CFLAGS) -o $@ $<

clean:
rm nombre
rm *.o



Te voy a dejar un par de links que te van a servir.

Primero, no vayas a confundir un makefile con un script.
Segundo, el makefile es un archivo especial que si se usa con el comando de bash make te sirve para compilar/recompilar proyectos de manera muy sencilla. Es importante que tengas en cuenta que cuando se recompila mediante un makefile, se evalua que archivos fueron modificados y dichos archivos se vuelven a compilar; pero no se vuelve a compilar todo el proyecto (considerando que fue al menos previamente compilado). Para ser mas claro, una vez que fue compilado el proyecto (en el caso de realizarse cambios) solamente se vuelven a compilar los archivos que fueron modificados. Para ello se ayuda con la información de metadata que se incluye en los archivos, fíjate que hay un apunte de Furfaro que explica bastante bien Linux en general

Por otra parte un makefile no solo lo podes usar para compilar, sino para incluir directivas para el compilador o incluso para darle mas funcionalidad a la compilación. Por ejemplo si vos queres adjuntar librerías estáticas en un directorio en particular, se puede agregar mediante líneas.

El makefile es una herramienta poderosa que contas en Linux. Acordate aparte que tenes dos maneras sencillas de declarar tu archivo para ser usado mediante el comando make; mediante los nombres: makefile o Makefile. Se pueden usar otros nombres por si te interesa, pero no viene al caso ahora.

Generalmente la estructura que vas a encontrar es como la que te paso Feer, o bien algunas mas sencillas como las que te puse en las paginas web. No es obligatorio usar esa estructura, pero mantiene un sentido de ordenamiento y lógica que es bueno seguir.

Hay algunos símbolos como $, #, etc que son particulares en el makefile. El $ te permite reemplazar dentro de las líneas que especifiques mediante un $, lo que tengas declarado al inicio del makefile. Un clásico es:

CC=gcc

y en alguna parte poner $(CC). Es por comodidad, para poder cambiar rápidamente el compilador a la hora de usar el makefile.

El # te permite escribir líneas de comentario:

#Esto es un comentario
Esto no es un comentario

Después tenes mas directivas que seria bueno que investigaras, no son mas particulares que las que usas dentro de Linux.

Estas paginas te pueden servir (salen en la primer pagina de google, si te pones a buscar). De hecho es lo primero que tenes que acostumbrarte a hacer, si no entendes en google ponelo que es tu mejor amigo:

http://mrbook.org/tutorials/make/
http://www.cs.colby.edu/maxwell/courses/...maketutor/
http://www.ntu.edu.sg/home/ehchua/progra..._make.html

Y te dejo unos ejemplos de makefile que use para Informatica 1.
Al archivo que dice makefile(1) quitale el (1), Windows choto que me trae conflicto con archivos que no me diferencia mayúsculas de minúsculas.

ACLARACIONES:

Con respecto al makefile que te paso Feer. Cuidado con la etiqueta clean; no te vayas a olvidar de modificar el * o sino te vas a borrar todos los archivos objeto que tengas en tu carpeta donde este el makefile. Esto te lo aclaro porque el * representa cualquier cosa, puede ser para definir un path, un nombre o la mitad de lo que quieras. Generalmente no hay problema en borrar todos los archivo objetos, pero tenelo en cuenta.

El comando echo me imagino que lo conoceras, sino hace justamente lo que significa el comando.
El prefijo @ suele no ser necesario, tenelo en cuenta por si te trae conflictos.
Tambien está el apunte de furfaro que anda dando vueltas por todos lados ya..
Yo lo subo es re interesante.

[attachment=7960]
Gracias Fer, de ese hablaba justamente. Me dio un poco de fiaca subirlo.
Es un golazo para primer año con Linux.


OFF: Por curiosidad ¿Estas terminando Info 1 o vas a empezar el año que viene y queres ir investigando?
(20-12-2013 22:41)John_Doe* escribió: [ -> ]Gracias Fer, de ese hablaba justamente. Me dio un poco de fiaca subirlo.
Es un golazo para primer año con Linux.


OFF: Por curiosidad ¿Estas terminando Info 1 o vas a empezar el año que viene y queres ir investigando?

No. Estoy terminando info1 pero como nunca le había prestado mucha atención al make ahora lo necesitaba para poder hacer el proyecto.

Muchas gracias! y a los que me contestaron. Me sirvió la explicacion.

saludos!!!
URLs de referencia