13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!