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:
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:
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.
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}
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}
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.





