Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 132 — #170<br />
✐<br />
Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />
Para lo demás, por norma g<strong>en</strong>eral los espacios <strong>en</strong> blanco se ignoran de modo que se<br />
pued<strong>en</strong> usar a efectos de legibilidad.<br />
Las reglas no están restringidas a llamadas al compilador; puede llamar a cualquier<br />
programa que quiera. Creando grupos de reglas de dep<strong>en</strong>d<strong>en</strong>cia, puede modificar<br />
sus ficheros fu<strong>en</strong>tes, escribir make y estar seguro de que todos los fichero<br />
afectados serán re-construidos correctam<strong>en</strong>te.<br />
Macros<br />
Un makefile puede cont<strong>en</strong>er macros (t<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta que estas macros no ti<strong>en</strong><strong>en</strong><br />
nada que ver con las del preprocesador de C/<strong>C++</strong>). La macros permit<strong>en</strong> reemplazar<br />
cad<strong>en</strong>as de texto. Los makefiles del libro usan una macro para invocar el<br />
compilador de <strong>C++</strong>. Por ejemplo,<br />
CPP = mycompiler<br />
hello.exe: hello.cpp<br />
$(CPP) hello.cpp<br />
El = se usa para indicar que CPP es una macro, y el $ y los paréntesis expand<strong>en</strong><br />
la macro. En este caso, la expansión significa que la llamada a la macro $(CPP)<br />
será reemplazada con la cad<strong>en</strong>a mycompiler. Con esta macro, si quiere utilizar un<br />
compilador difer<strong>en</strong>te llamado cpp, sólo ti<strong>en</strong>e que cambiar la macro a:<br />
CPP = cpp<br />
También puede añadir a la macro opciones del compilador, etc., o usar otras macros<br />
para añadir dichas opciones.<br />
Reglas de sufijo<br />
Es algo tedioso t<strong>en</strong>er que decir a make que invoque al compilador para cada<br />
fichero cpp del proyecto, cuando se sabe que básicam<strong>en</strong>te siempre es el mismo proceso.<br />
Como make está diseñado para ahorrar tiempo, también ti<strong>en</strong>e un modo de<br />
abreviar acciones, siempre que dep<strong>en</strong>dan del sufijo de los ficheros. Estas abreviaturas<br />
se llaman reglas de sufijo. Una regla de sufijo es la la forma de indicar a make<br />
cómo convertir un fichero con cierta ext<strong>en</strong>sión (.cpp por ejemplo) <strong>en</strong> un fichero con<br />
otra ext<strong>en</strong>sión (.obj o .exe). Una vez que le haya indicado a make las reglas para<br />
producir un tipo de fichero a partir de otro, lo único que ti<strong>en</strong>e que hacer es decirle a<br />
make cuales son las dep<strong>en</strong>d<strong>en</strong>cias respecto a otros ficheros. Cuando make <strong>en</strong>cu<strong>en</strong>tra<br />
un fichero con una fecha previa a otro fichero del que dep<strong>en</strong>de, usa la regla para<br />
crear la versión actualizada del fichero objetivo.<br />
La regla de sufijo le dice a make que no se necesitan reglas explícitas para construir<br />
cada cosa, <strong>en</strong> su lugar le explica cómo construir cosas <strong>en</strong> base a la ext<strong>en</strong>sión del<br />
fichero. En este caso dice «Para contruir un fichero con ext<strong>en</strong>sión .exe a partir de<br />
uno con ext<strong>en</strong>sión .cpp, invocar el sigui<strong>en</strong>te comando». Así sería para ese ejemplo:<br />
CPP = mycompiler<br />
.SUFFIXES: .exe .cpp<br />
.cpp.exe:<br />
$(CPP) $<<br />
La directiva .SUFFIXES le dice a make que debe vigilar las ext<strong>en</strong>siones que se<br />
132<br />
✐<br />
✐<br />
✐<br />
✐