logotipo

img_google
Mediterrania
Informática, inteligencia artificial, web, diseño, programación...
Tira ECOL
Sindicación
Directorios de Bitácoras
Contador de visitas

Site Counter
 
Introducción a make (parte II)
En este segundo artículo de la serie pretendo explicar el uso de varibles. En verdad no tiene mucho sentido utilizar make como se vió en el artículo anterior, pues el tamaño del Makefile es excesivo lo que lleva a que sea poco práctico.

Esto mejorará con el uso de las variables, que veremos hoy, y con el uso de sufijos, que veremos en el último artículo.

Las variables de un fichero Makefile tienen la siguiente forma: ${nombre}$ o $(nombre). Una variable se puede usar para indicar cualquier cosa de un fichero Makefile excepto el nombre de una regla. Por ejemplo, la usaremos para indicar el compilador, los flags de compilación, las librerías, los ficheros fuente, etcétera.

Veamos un ejemplo de uso de flags:
CC = g++
LIB = -lm -lGL -lglu
BIN = main

all: result

result: main.cpp main.h
  ${CC} -o ${BIN} main.cpp ${LIB}

Como se puede observar, las variables hacen que el Makefile sea mucho más generalizable y reutilizable.

Veamos cómo modificar el fichero del otro día, introduciendole variables:
CC = g++
OPTS = -Wno-deprecated -O3
CLIBS = -lm
OPENGL = -lglut -lGL -lGLU
OBJS = Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o

RESULT = raytracer


all: $(RESULT)

Algebra.o: Algebra.cpp Algebra.h
   ${CC} -c Algebra.cpp $

Camara.o: Camara.cpp Camara.h
   ${CC} -c Camara.cpp

FuenteLuminosa.o: FuenteLuminosa.cpp FuenteLuminosa.h
   ${CC} -c FuenteLuminosa.cpp

RGB.o: RGB.cpp RGB.h
   ${CC} -c RGB.cpp

Primitiva.o: Primitiva.cpp Primitiva.h
   ${CC} -c Primitiva.cpp

Render.o: Render.cpp Render.h
   ${CC} -c Render.cpp

Escena.o: Escena.cpp Escena.h
   ${CC} -c Escena.cpp

raytracer: ${RESULT}.cpp ${OBJS}
   ${CC} -o ${RESULT} ${OBJS} ${RESULT}.cpp ${CLIBS} ${OPENGL} ${OPTS}

Cualquier duda o consulta que os surja no dudéis en preguntármela.

El próximo día veremos cómo hacer un Makefile mucho más generalizable aprovechando una de las características avanzadas del make.
No