[eside-ghost] Problemas para hacer un makefile ligeramente complejo
Jon Ander Ortiz
jonbaine en gmail.com
Lun Nov 23 15:28:41 CET 2009
Buenas:
>"Una cosa, ¿donde podría profundizar más todo esto?."
Esto que has hecho te sirve para hacer algo "de andar por casa" (cosa
que no quita para que te sirva perfectamente).
El "estándar de facto" de GNU en sistemas de compilación hasta ahora
ha sido libtool (englobo aquí también a automake y autoconf), y
últimamente las cosas se mueven hacia cmake o qmake en entornos Qt
(también comentan que rmake es el futuro, pero cada X años sale el
nuevo sistema de compilación que destronará a libtool).
Libtool es un horror para algunas cosas, pero es increíblemente
potente, y si lo haces andar, funciona prácticamente en todos los
sistemas GNU/Linux - freebsd (mítico ./configure && make && make
install).
Eso sí, uno de los problemas de libtool, es su documentación:
http://www.gnu.org/software/libtool/manual/
http://en.wikipedia.org/wiki/GNU_build_system
Un saludete!
2009/11/23, Asier González <3asgonza en rigel.deusto.es>:
> 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