[eside-ghost] Problemas para hacer un makefile ligeramente complejo

Egoitz Aurrekoetxea Aurre egoitz en ramattack.net
Lun Nov 23 22:25:50 CET 2009


Pues el tema...es que si estás interesado en el tema de crear binarios... sería bueno que echaras un vistazo a todo el proceso.... es decir la generación del 	script configure con autoconf y la parentela... después generación del makefile con el script configure y por último el make con el makefile generado....

la verdad es que es un tema interesante... 

echa un vistazo a wikipedia.... y a las : 

En wikipedia por ejemplo lo que es el configure y como se genera....

http://en.wikipedia.org/wiki/Configure_script

En esta  web también tienes un link a las autotools... que contribuyen en la tarea de generar el script configure... por último si hablamos sobre todo de compilar C.... hecha un vistazo a man gcc. Allí tienes los posibles flags a meter a un makefile... que al final básicamente (para compilación) lo que hace es gcc y cada de uno de los fuentes pero con unos flags para el gcc... habilitamos posibilidad para gdb o no.... para una cpu u otra....  warnings o no warnings... 

Hombre luego decirte que si es para generar tus propios binarios de tu código bien.... pero que a la hora de instalar servidores en produccion no te recomiendo ni tocar los makefiles ni compilar código generando tu el makefile a partir del configure.. Ojo estoy totalmente a favor de instalar software compilando (el tema de usar paquetería con los años cada día lo odio mas y mas.... he sido debianero a tope durante bastante tiempo) pero cuando tienes una máquina en producción con necesidad de actualizar un daemon y que no puedes andar actualizando constantemente cuando al cabo de x meses necesites actualizar algo que te pida actualizar libc y demás rollos no mola pero que nada.... Un muy buen sistema operativo que gestiona esto adecuadamente es FreeBSD (además de tener otras muchísimas genialidades de verdad).

Espero haberte ayudado :)

Un saludo Asier!



El 23/11/2009, a las 14:04, Asier González escribió:

> Hice como me dijiste:
> 
> Make.sh:
> -- INICIO --
> #!/bin/bash
> cd src && make
> cd carpeta1 && make
> cd ../carpeta2 && make
> -- FIN --
> 
> Luego en los makefile correspondientes, puse los comandos adecuados y va 
> de lujo ;) .
> 
> Una cosa, ¿donde podría profundizar más todo esto?.
> 
> Un Saludo.
> 
> Egoitz Aurrekoetxea Aurre escribió:
>> OK nos cuentas :)
>> 
>> salu2!!
>> 
>> 
>> El 22/11/2009, a las 11:48, Asier González escribió:
>> 
>> 
>>> Muchas gracias ;) , en breve lo probare y te cuento haber si he tenido 
>>> algún problema o algo.
>>> 
>>> Un Saludo.
>>> 
>>> Egoitz Aurrekoetxea Aurre escribió:
>>> 
>>>> Aupa Asier,
>>>> 
>>>> Si, me refiero ese makefile te va bien si está todo en un directorio no?... pues dejas en el directorio /home/user/proyecto/ ese makefile... y después en el siguiente directorio metes otro makefile similar cambiando lo justo (porque entiendo que quieres hacer algo parecido en todos los directorios donde vayas a compilar)... entonces haces... un cd directorio te posicionas y lanzas el make... un ejemplillo : 
>>>> 
>>>> #!/bin/sh
>>>> 
>>>> cd /home/user/proyecto/ && make 
>>>> cd /home/user/proyecto/directorio1 && make
>>>> 
>>>> Si quieres que los objeto se muevan a otro directorio como obj.... 
>>>> metes lo siguiente al makefile de ese directorio : 
>>>> 
>>>> install :  
>>>> cp *.o /dondesea
>>>> 
>>>> entonces para ese nuevo directorio metes en el script : 
>>>> 
>>>> cd /home/user/proyecto/directorio && make
>>>> cd /home/user/proyecto/directorio && make install 
>>>> 
>>>> (en realidad podrías hacer solo lo segundo y bastaría...)
>>>> 
>>>> Y con esto te ahorras el hacer un solo Makefile para todo y para instalar tu aplicacion simplemente habría que hacer un ./make.sh y listo....
>>>> 
>>>> Yo lo haría así o probaría esto si dices que hacer lo otro te resulta mas lio.
>>>> 
>>>> Agures!!!
>>>> 
>>>> 
>>>> El 21/11/2009, a las 13:36, Asier González escribió:
>>>> 
>>>> 
>>>> 
>>>>> ¿Podrías ponerme un ejemplo sencillo de esa forma?, yo la verdad es que 
>>>>> no controlo mucho con la consola, ni creando script de bash.
>>>>> 
>>>>> Un Saludo.
>>>>> 
>>>>> Egoitz Aurrekoetxea Aurre escribió:
>>>>> 
>>>>> 
>>>>>> Buenas,
>>>>>> 
>>>>>> Los flags que usas no tienen nada del otro mundo así que si haces...  
>>>>>> un make.sh que cambie de directorio y haga en cada uno un make y la  
>>>>>> acción.. el clean o lo que sea? por ejemplo el make install que haga  
>>>>>> el make en el sitio y después o con install o con cp los mueves a  
>>>>>> obj??... me refiero yo lo haría simple.... si hacer el makefile es mas  
>>>>>> costoso para que vaya a varios sitios... yo haría algo así... usa una  
>>>>>> shell como sh que tiene cualquier sistema operativo y listo :)
>>>>>> 
>>>>>> Salu2!
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> El 20/11/2009, a las 21:42, Asier González escribió:
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> Veréis es que tengo un problema a la hora de generar un Makefile de  
>>>>>>> unos
>>>>>>> fuentes en C++. Si fuera en la misma carpeta no habría problema porque
>>>>>>> si tuviera esta estructura:
>>>>>>> 
>>>>>>> /home/user/proyecto/
>>>>>>>                            /main.cpp
>>>>>>>                            /cabecera1.h
>>>>>>>                            /cabecera2.h
>>>>>>>                            /fuente1.cpp
>>>>>>>                            /fuente2.cpp
>>>>>>> 
>>>>>>> Makefile:
>>>>>>> -- INICIO --
>>>>>>> CC=g++
>>>>>>> DFLAGS=-c -ggdb -Wall
>>>>>>> CFLAGS=-c -O3 -Wall
>>>>>>> FLAGS=DFLAGS
>>>>>>> OBJ=main.o fuente1.o fuente2.o
>>>>>>> 
>>>>>>> proyecto: $(OBJ)
>>>>>>> $(CC) $(OBJ) -o proyecto
>>>>>>> 
>>>>>>> main.o: main.c cabecera1.h
>>>>>>> $(CC) $(FLAGS) main.cpp cabecera1.h
>>>>>>> 
>>>>>>> fuente1.o: fuente1.c cabecera1.h cabecera2.h
>>>>>>> $(CC) $(FLAGS) fuente1.c cabecera1.h cabecera2.h
>>>>>>> 
>>>>>>> fuente2.o: fuente2.c cabecera2.h
>>>>>>> $(CC) $(FLAGS) fuente2.c cabecera2.h
>>>>>>> 
>>>>>>> clean:
>>>>>>> rm -f -r *~
>>>>>>> rm -f -r *.o
>>>>>>> 
>>>>>>> clean_all:
>>>>>>> rm -f -r *~
>>>>>>> rm -f -r *.o
>>>>>>> rm -f -r *~.c
>>>>>>> rm -f -r *~.h
>>>>>>> rm -f -r proyecto
>>>>>>> -- FIN --
>>>>>>> 
>>>>>>> Aparentemente así salvo error, me funcionaria bien, si estuviera  
>>>>>>> todo en
>>>>>>> un directorio.
>>>>>>> 
>>>>>>> Pero quiero estructurarlo de la siguiente forma:
>>>>>>> 
>>>>>>> /home/user/proyecto/
>>>>>>>                            /bin/
>>>>>>>                                 /proyecto
>>>>>>>                             /obj/
>>>>>>>                                  /main.o
>>>>>>>                                  /fuente1.o
>>>>>>>                                  /fuente2.o
>>>>>>>                            /src/
>>>>>>>                                 /main.cpp
>>>>>>>                                 /carpeta1/
>>>>>>>                                               /cabecera1.h
>>>>>>>                                               /fuente1.cpp
>>>>>>>                                 /carpeta2/
>>>>>>>                                               /cabecera2.h
>>>>>>>                                               /fuente2.cpp
>>>>>>> 
>>>>>>> Tendría que hacer un makefile bastante más complejo, este estaría
>>>>>>> situado en /home/user/proyecto/ , pero el problema es que no se ni por
>>>>>>> donde empezar, he estado mirando tutorial sobre make, pero solo lo  
>>>>>>> hacen
>>>>>>> para un solo directorio, o son excesivamente complejos.
>>>>>>> 
>>>>>>> Haber si me podríais echar una manita, gracias.
>>>>>>> 
>>>>>>> Un Saludo.
>>>>>>> 
>>>>>>> PD: Espero que se vea bien como he estructurado los directorios.
>>>>>>> _______________________________________________
>>>>>>> eside-ghost mailing list
>>>>>>> eside-ghost en listas.deusto.es
>>>>>>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> _______________________________________________
>>>>>> eside-ghost mailing list
>>>>>> eside-ghost en listas.deusto.es
>>>>>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> _______________________________________________
>>>>> eside-ghost mailing list
>>>>> eside-ghost en listas.deusto.es
>>>>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>>>>> 
>>>>> 
>>>> _______________________________________________
>>>> eside-ghost mailing list
>>>> eside-ghost en listas.deusto.es
>>>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>>>> 
>>>> 
>>>> 
>>> _______________________________________________
>>> eside-ghost mailing list
>>> eside-ghost en listas.deusto.es
>>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>>> 
>> 
>> _______________________________________________
>> eside-ghost mailing list
>> eside-ghost en listas.deusto.es
>> https://listas.deusto.es/mailman/listinfo/eside-ghost
>> 
>> 
> 
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en listas.deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost



Más información sobre la lista de distribución eside-ghost