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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


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

Desconectado Desconectado

Mensajes: 53



Ver Perfil
Duda Makefile
« en: 25 Marzo 2020, 11:52 am »

Buenas tardes/días a todos.

Tengo un programa en c y para ello me he creado un makefile de los más sencillito posible para no andar ejecutando los comandos de ejecución, hasta ahí sin ningún problema, todo funciona bien.

El problema (ciertamente no lo es) es que quiero añadir una funcionalidad al makefile. Quiero que cuando ejecute make info en vez de make me muestre el nombre del/los ejecutables que genere/construya.
 
Código
  1. CC = gcc
  2. # -O para aplicar el optimizador de codigo, -g para poder depurar, -Wall: avisos extra
  3. CFLAGS = -g -Wall
  4. # -lm enlaza la biblioteca matematica, -pthread enlaza la biblioteca de hilos
  5. LIBS = -lm -pthread
  6.  
  7. # $ make
  8. # $ make all
  9. # $ make all
  10. all: ej1 ej2
  11.  
  12. EJ1 = girar
  13. # $ make ej1
  14. ej1: $(EJ1)
  15.  
  16. EJ2 = crear
  17. # $ make ej2
  18. ej2: $(EJ2)
  19.  
  20. girar: girar.o
  21. $(CC) -o $@ $< $(CFLAGS) $(LIBS)
  22. girar.o: girar.c
  23. $(CC) -c -o $@ $< $(CFLAGS)
  24.  
  25.  
  26. crear: crear.o
  27. $(CC) -o $@ $< $(CFLAGS) $(LIBS)
  28. crear.o: crear.c
  29. $(CC) -c -o $@ $< $(CFLAGS)
  30.  
  31. clean:
  32. rm -f *.o
  33.  
  34.  


« Última modificación: 28 Marzo 2020, 12:45 pm por ace99 » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Duda Makefile
« Respuesta #1 en: 26 Marzo 2020, 21:01 pm »

Lo suyo sería que crearas unas variables para guardar los nombres de los ficheros fuente, objeto y ejecutables y así podrías mostrar luego la variable que guarda los ejecutables cuando ejecutes: make info


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
ace99

Desconectado Desconectado

Mensajes: 53



Ver Perfil
Re: Duda Makefile
« Respuesta #2 en: 26 Marzo 2020, 21:26 pm »

¿Te refieres a unas variables globales?

¿Y como identificarías que se ha escrito make info en vez de make?,¿al ser un makefile tiene la propiedad de identificarlo? La verdad, es mi primer makefile y no tengo mucha idea de como funciona, estuve buscando por internet sobre make info pero no encontre nada.

Estoy un poco perdido...
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Duda Makefile
« Respuesta #3 en: 26 Marzo 2020, 21:42 pm »

Los makefiles tienen la siguiente característica. Cuando tú ejecutas: make, sin nada más, el makefile busca la etiqueta "all:" y crea los archivos que se indican ahí siguiendo las dependencias necesarias para ello (crear primero los códigos objeto *.o y enlazar las librerías).
En cambio si escribes otra palabra después de "make" buscará y realizará las instrucciones que se indiquen en esa etiqueta. Si escribes: make clean, irá a la etiqueta "clean" y lo que hará en tu caso es eliminar todos los códigos objeto: rm -f *.o

Entonces lo que tienes que hacer es otra etiqueta, por ejemplo:
Código:
# El resto del makefile
# ...
info:
    echo "Se pueden construir los ejecutables ejer1 y ejer2"
Esta sería una versión simple en la que escribes a mano el nombre de los ejecutables. Si cambias el nombre de alguno de ellos, tendrías que cambiarlo ahí también.

Una opción sería utilizar variables (como lo son CC, CFLAGS, LIBS, EJ1, EJ2,...) para guardar los nombres de los ficheros y así podrías tener por ejemplo las variables: SRCS, OBJS, BINS,...
Y solo tendrías que cambiar el nombre en BINS para que el makefile esté completamente actualizado.

PD: Te recomendaría usar subdirectorios para los ficheros. Por convención se suelen crear dentro de tu directorio con el proyecto, los subdirectorios: src (contendrá los .cpp o .c), include (contendrá los .hpp o .h), obj (contendrá los .o), bin (contendrá los ejecutables) y doc (contendrá la documentación de tu proyecto en caso de que la quieras generar).
Así en el propio makefile puedes hacer que cada fichero se cree en su lugar correspondiente.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
ace99

Desconectado Desconectado

Mensajes: 53



Ver Perfil
Re: Duda Makefile
« Respuesta #4 en: 26 Marzo 2020, 22:32 pm »

Me habían explicado muy por encima lo que pasaba cuando hacías make y todo lo relacionado con el all.

Tu respuesta me ha venido muy pero que muy bien, de verdad.

Muchisimas gracias. ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA- Could not create a makefile (dev)
Programación C/C++
alexis33de 0 3,319 Último mensaje 22 Diciembre 2010, 01:31 am
por alexis33de
Duda con Makefile [Solucionado]
Scripting
leogtz 5 4,261 Último mensaje 10 Agosto 2011, 08:59 am
por leogtz
Aprediendo a usar makefile
Programación C/C++
andrewmetal93 1 2,110 Último mensaje 10 Mayo 2012, 03:58 am
por x64core
Problema con makefile en C
Programación General
Kefren 2 2,143 Último mensaje 23 Junio 2013, 17:35 pm
por Kefren
Informacion sobre los makefile
GNU/Linux
dato000 0 1,328 Último mensaje 17 Julio 2013, 00:57 am
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines