elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  dudas con make
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: dudas con make  (Leído 5,963 veces)
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
dudas con make
« en: 14 Mayo 2014, 01:51 am »

hola a todos.
bueno el problema que tengo es que cree un makefile pero cuando lo ejecuto no se ejcutan todos los target que hago y si pongo todas las intrucciones en un solo target si se ejecuta.
a la unica manera que encontre de que se ejcute todo bien es poniendo:
make object && make clean
pero como e visto ejemplos de make con varios target por eso quisiera saber si tengo alun error o me falta algo.

Código
  1.    CC = gcc
  2.  
  3.    CFLAGS=-I/home/bugtraq/progc/make2/funcion.h \
  4.        -I/home/bugtraq/progc/make2/funciondos.h
  5.  
  6.    nombre= prueba
  7.  
  8.    valores=-Wall -m32 -g -c
  9.  
  10.    clean=rm -f
  11.  
  12.    object: $(nombre).c $(nombre).o
  13.        $(CC)  $(valores) $(nombre).c  -o  $(nombre).o
  14.        $(CC)  $(nombre).o  -o  $(nombre)
  15.  
  16.    clean: $(nombre).o
  17.        $(clean) $(nombre).o
  18.  
saludos.
drewermerc.


En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: dudas con make
« Respuesta #1 en: 14 Mayo 2014, 03:58 am »

hola Drewermerc, a simple vista veo un par de cosas, primer punto es que un makefile es una sucesión de reglas para gestionar la compilación de una aplicación, en donde dichas reglas se definen como:

objetivo: dependencias (archivos objetos)
          comandos o sentencias para compilar los .c asociados a ellos

veo que luego de tu objetivo tienes como dependecia un solo objeto, debes detallar todos para que los enlace, si llamas a una variable para ello, debería definirse arriba todos los .o necesarios; luego asociarlo a sus respectivas fuentes. (puedes hacer uso de %.o y %.c).

con lo cual, lo correcto sería mediante variables definidas o bien con %, para cada .o que dependa de .c (%.o : %.c) aplicar la regla CC.....

una regla podría ser para ello
Citar
$(CC)   $(valores) -c $< -o $@

lo que tendrías que hacer simplemente es a tu variable nombre, asignarle prueba, otra_prueba, etc.
 
Citar
nombre= prueba  otra_prueba

para clean otra opción es hacer un *.o, si quieres limpiar todos por ejemplo...

Citar
clean:
   rm -f *.o

espero haber sido claro, es más facil verlo que explicarlo jajaaa saludos!


En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: dudas con make
« Respuesta #2 en: 14 Mayo 2014, 05:15 am »

hola Gh057.

bueno gracias por responder, pues segun yo con lo que me dijiste tiene que quedar el codigo asi.

Código
  1.        CC = gcc
  2.  
  3.       CFLAGS=-I/home/bugtraq/progc/make2/funcion.h \
  4.           -I/home/bugtraq/progc/make2/funciondos.h
  5.  
  6.       nombre= prueba
  7.  
  8.       valores=-Wall -m32 -g -c
  9.  
  10.       clean=rm -f
  11.  
  12.       object: $(nombre).c $(nombre).o %.o : %.c
  13.           $(CC)   $(valores) -c $< -o $@
  14.           $(CC)  $(nombre).o  -o  $(nombre)
  15.  
  16.       clean: $(nombre).o
  17.           $(clean) $(nombre).o
  18.  
pero me dice lo siguiente.
Makefile:17: *** hay varios patrones de objetivos.  Alto.
y lo intente poniendolo asi:
Código
  1.       object: $(nombre).c $(nombre).o %.o
  2.           $(CC)   $(valores) -c $< -o $@
  3.           $(CC)  $(nombre).o  -o  $(nombre)
  4.  

pero medecia.
make: *** No hay ninguna regla para construir el objetivo `%.o', necesario para `object'.  Alto.

entonces se lo quite pero me sigue ejecutando solo un objetivo y el clean ya no se ejecuta.
nose si este mal alomejor  y me equivoque con la sintaxis si es asi corrigeme porfavor.
En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: dudas con make
« Respuesta #3 en: 14 Mayo 2014, 06:20 am »

hola  , no no a ver podrías hacer algo así..

Citar
       

         CC = gcc
         CFLAGS=-Wall -m32 -g -c  //agregas parámetros como el debugger
         LDFLAGS=-I (ruta a...)/funcion.h  -I (ruta a...)funciondos.h                           //bibliotecas externas
          
         OBJECTS=(ruta a proyecto...)/prueba.o (ruta a proyecto...)/otra_prueba.o  //objetos de prueba..
         SOURCES=(ruta a proyecto..)/prueba.c (ruta a proyecto...)/otra_prueba.c  //fuentes del proyecto

         proyecto: $(OBJECTS)
             $(CC) $(OBJECTS) -o proyecto
    
         depend:
             makedepend $(LDFLAGS) $(OBJECTS) $(SOURCES)//se ejecuta si solamente si se modifican

         clean:
            rm -f $(OBJECTS)

luego haz make depend y make.

obviamente podrías extraer también las rutas a un PATH... como te darás cuenta tienes muchísimas formas de hacerlo.

un cordial saludo

(agrego) el hecho de hacerlo así y no solamente con la sentencia de compilación, que de esa forma si no se modifica no compila toooodo el proyecto... puede seguir mejorándose por ejemplo: si las bibliotecas también se están desarrollando, debes linkearlas los .a por separado -puedes hasta hacer un make para automatizar dentro de cada una- y de esa manera tu trabajo avanzará más rápido.

toda la  info necesaria en gnu.org, bueno un paneo muy bueno también en la wiki, etc etc.
« Última modificación: 14 Mayo 2014, 06:36 am por Gh057 » En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: dudas con make
« Respuesta #4 en: 14 Mayo 2014, 06:40 am »

bueno pues lo ejecuto y sigue igual solo ejecuta el primer objetivo en este caso proyecto y los demas ya no.
cuando make depende me dice esto.
makedepend -I/home/bugtraq/progc/make2/funcion.h -I/home/bugtraq/progc/make2/funciondos.h /home/bugtraq/progc/make2/prueba.o  /home/bugtraq/progc/make2/prueba.c
make: makedepend: No se encontr� el programa
make: *** [depend] Error 127

que crees que este fallando.
bueno gracias revisare las paginas para aprender mas de lo makefile
En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: dudas con make
« Respuesta #5 en: 14 Mayo 2014, 07:13 am »

hola Drewermerc, una cosa son los objetos y otra los objetivos... yo te amplié a varios objetos, y agregué lo de las dependencias, pero sigues teniendo un solo objetivo como tal, por ejemplo proyecto (o el nombre que quieras para el ejecutable) cuando es para diferentes .o ( o sea compilas por separado) ahí le agregas diferentes targets...

(bueno no es del todo cierto... depend y clean también son targets! solo que no dependen de nadie,  se ejecuta el comando o sentencia asociada al llamado de los mismos)
.
en la wiki tienes un ejemplo con variables y el uso del comodín %, como te indicaba al inicio; 
por favor mírate también el enlace que te pasé por mp basante similar aunque mejor explicado como el que luego te propuse.

otro lugar por donde puede ayudarte a entender el mecanismo es  usando la ide anjuta, el mismo te genera automáticamente un make para tu proyecto; luego abres el makefile generado y verás que es muy similar la sintaxis, solo agrega algunos detalles como por ejemplo el uso de sufijos como .c .cpp etc...

saludos
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: dudas con make
« Respuesta #6 en: 14 Mayo 2014, 07:31 am »

hola bueno pues muchas gracias y perdon es que no habia visto que me habias enviado un mensaje lo siento.
bueno gracias revisare todo.
nos vemos.
saludos.
drewermerc.  :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Make easy 1.0.93 (10/01/07) « 1 2 »
Programación Visual Basic
....................................... 17 6,103 Último mensaje 10 Enero 2007, 18:32 pm
por .......................................
problemas con configure, make, y make install « 1 2 »
GNU/Linux
rtl8187 16 20,067 Último mensaje 25 Marzo 2011, 05:43 am
por D4RIO
Make CrypShell « 1 2 »
Scripting
<< Lucas, ¿quién más? >> 11 8,107 Último mensaje 15 Febrero 2010, 20:34 pm
por << Lucas, ¿quién más? >>
Aplicación -make-
GNU/Linux
Dondvp 1 3,040 Último mensaje 11 Octubre 2011, 12:46 pm
por adastra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines