Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 135 — #173<br />
✐<br />
3.11. Make: cómo hacer compilación separada<br />
Guess: Guess.o<br />
$(CPP) $(OFLAG)Guess Guess.o<br />
Guess2: Guess2.o<br />
$(CPP) $(OFLAG)Guess2 Guess2.o<br />
Return.o: Return.cpp<br />
Declare.o: Declare.cpp<br />
Ifth<strong>en</strong>.o: Ifth<strong>en</strong>.cpp<br />
Guess.o: Guess.cpp<br />
Guess2.o: Guess2.cpp<br />
La macro CPP conti<strong>en</strong>e el nombre del compilador. Para usar un compilador difer<strong>en</strong>te,<br />
puede editar el makefile o cambiar el valor de la macro desde línea de<br />
comandos, algo como:<br />
$ make CPP=cpp<br />
T<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta, sin embargo, que ExtractCode.cpp ti<strong>en</strong>e un esquema automático<br />
para construir makefiles para compiladores adicionales.<br />
La segunda macro OFLAG es la opción que se usa para indicar el nombre del<br />
fichero de salida. Aunque muchos compiladores asum<strong>en</strong> automáticam<strong>en</strong>te que el<br />
fichero de salida ti<strong>en</strong>e el mismo nombre base que el fichero de <strong>en</strong>trada, otros no<br />
(como los compiladores GNU/Unix, que por defecto crean un fichero llamado a.<br />
out).<br />
Como ve, hay dos reglas de sufijo, una para ficheros .cpp y otra para fichero .c<br />
(<strong>en</strong> caso de que se necesite compilar algún fu<strong>en</strong>te C). El objetivo por defecto es all,<br />
y cada línea de este objetivo está «continuada» usando la contrabarra, hasta Guess2,<br />
que el el último de la lista y por eso no ti<strong>en</strong>e contrabarra. Hay muchos más fichero<br />
<strong>en</strong> este capítulo, pero (por brevedad) sólo se muestran algunos.<br />
Las reglas de sufijo se ocupan de crear fichero objeto (con ext<strong>en</strong>sión .o) a partir<br />
de los fichero .cpp, pero <strong>en</strong> g<strong>en</strong>eral se necesita escribir reglas explícitam<strong>en</strong>te para<br />
crear el ejecutable, porque normalm<strong>en</strong>te el ejecutable se crea <strong>en</strong>lazando muchos fichero<br />
objeto difer<strong>en</strong>te y make no puede adivinar cuales son. También, <strong>en</strong> este caso<br />
(GNU/Unix) no se usan ext<strong>en</strong>siones estándar para los ejecutables de modo que una<br />
regla de sufijo no sirve para esas situaciones. Por eso, verá que todas las reglas para<br />
construir el ejecutable final se indican explícitam<strong>en</strong>te.<br />
Este makefile toma el camino más seguro usando el mínimo de prestaciones<br />
de make; sólo usa los conceptos básicos de objetivos y dep<strong>en</strong>d<strong>en</strong>cias, y también macros.<br />
De este modo está prácticam<strong>en</strong>te asegurado que funcionará con la mayoría<br />
de las implem<strong>en</strong>taciones de make. Eso implica que se produc<strong>en</strong> fichero makefile<br />
más grandes, pero no es algo negativo ya que se g<strong>en</strong>eran automáticam<strong>en</strong>te por<br />
ExtractCode.cpp.<br />
Hay muchísimas otras prestaciones de make que no se usan <strong>en</strong> este libro, incluy<strong>en</strong>do<br />
las versiones más nuevas e intelig<strong>en</strong>tes y las variaciones de make con atajos<br />
avanzados que permit<strong>en</strong> ahorrar mucho tiempo. La docum<strong>en</strong>tación propia de cada<br />
make particular describe <strong>en</strong> más profundidad sus características; puede apr<strong>en</strong>der<br />
más sobre make <strong>en</strong> Managing Projects with Make de Oram y Taiboot (O’Reilly, 1993).<br />
También, si el fabricante de su compilador no proporciona un make o usa uno que no<br />
es estándar, puede <strong>en</strong>contrar GNU Make para prácticam<strong>en</strong>te todas las plataformas<br />
que exist<strong>en</strong> buscado <strong>en</strong> los archivos de GNU <strong>en</strong> internet (hay muchos).<br />
135<br />
✐<br />
✐<br />
✐<br />
✐