static-httpd

Sitio web estático (HTML + CSS) que sostiene el blog del autor
Log | Files | Refs

index.html (3869B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      5 <meta name="viewport" content="width=device-width, initial-scale=1" />
      6 <title>De las herramientas make y cmake</title>
      7 <link rel="icon" type="image/png" href="/favicon.png" />
      8 <link rel="stylesheet" type="text/css" href="../article.css" />
      9 </head>
     10 <body>
     11 <header>
     12 <p class="title">De las herramientas make y cmake</p>
     13 <p class="date">1 de mayo de 2016 • fjbalon</p>
     14 </header>
     15 <p>Make es una herramienta de gestión de dependencias usada en entornos de la familia UNIX. Es una buena práctica para compilar de forma automatizada códigos compuestos y complejos, por ejemplo en códigos compuestos de códigos C en distintos ficheros con distintos ficheros de cabecera <emb>.h</emb>.</p>
     16 <p>Para preparar el funcionamiento de make es necesario crear un fichero, en el cual se especifica y se configura todo lo necesario para el proceso. Este fichero es denominado makefile. Podemos decir que son las instrucciones que make debe realizar.</p>
     17 <p>Como añadido, make entiende los formatos y extensiones, dando una respuesta apropiada a cada tipo de archivo.</p>
     18 <p>El formato genérico para un makefile es el siguiente:</p>
     19 <pre><code>VARIABLES
     20 ...
     21 
     22 OBJETIVO:  DEPENDENCIAS 
     23     COMANDO
     24     ...</code></pre>
     25 <p>Un makefile simple para realizar con make la compilación de un programa C sería similar al siguiente:</p>
     26 <pre><code>hola:  hola.c 
     27     gcc -o hola hola.c -I.\end{lstlisting}
     28 
     29 Podemos mejorarlo aún más para que sólo compile los ficheros que han cambiado desde el 
     30 último make, para ello sería similar al siguiente:
     31 
     32 \begin{lstlisting}[language=make]
     33 # Vease el cambio de los ficheros .c a .o.
     34 # Internamente make sabe que los .o son .c 
     35 # y asi los busca y compila; ignorando los 
     36 # encabezados.
     37 CC=gcc
     38 CFLAGS=-I.
     39 
     40 hola: hola.o
     41     $(CC) -o hola hola.o</code></pre>
     42 <p>En este caso si hiciéramos cambios en alguna de las cabeceras <emb>.h</emb> make no recompilaría los códigos C <emb>.c</emb>. Si quisiéramos, como generalmente debería ser, que esto ocurriese:</p>
     43 <pre><code>CC=gcc
     44 CFLAGS=-I.
     45 DEPS = hola.h
     46 
     47 %.o: %.c $(DEPS)
     48     $(CC) -c -o $@ $< $(CFLAGS)
     49 
     50 hola: hola.o 
     51     $(CC) -o hola hola.o</code></pre>
     52 <p>Podemos mejorar el makefile añadiéndole más acciones, como una acción \textit{clean} para limpiar la compilación.</p>
     53 <pre><code>CC=gcc
     54 CFLAGS=-I.
     55 DEPS = hola.h
     56 
     57 %.o: %.c $(DEPS)
     58     $(CC) -c -o $@ $< $(CFLAGS)
     59 
     60 hola: hola.o 
     61     $(CC) -o hola hola.o
     62 
     63 clean: 
     64     rm -f hola hola.o</code></pre>
     65 <p>E incluso podemos hacerlo más genérico y escalable declarando los nombres de los ficheros en forma de variable:</p>
     66 <pre><code>CC=gcc
     67 CFLAGS=-I.
     68 DEPS = hola.h
     69 OBJ = hola.o 
     70 
     71 %.o: %.c $(DEPS)
     72     $(CC) -c -o $@ $< $(CFLAGS)
     73 
     74 hola: $(OBJ)
     75     $(CC) -o $@ $^ $(CFLAGS)
     76 
     77 # Podemos usar .PHONY para indicarle a 
     78 # make que el target clean en este caso 
     79 # es ficticio y no debe crear fichero; 
     80 # ya que si existiera un fichero llamado 
     81 # clean en el directorio no trabajaria.
     82 .PHONY: clean
     83 clean: 
     84     rm -f $(ODIR)</code></pre>
     85 <p>Por otro lado, el <b>procedimiento CMake</b> (véase <a href="https://cmake.org">cmake.org</a>) o <i>Cross Platform Make</i> es una utilidad multiplataforma de automatización de código, que permite construir, probar y empaquetar el software. Es, en otras palabras, una suite de herramientas independientes de más alto nivel que make, y que facilita la compilación de programas C. Por ejemplo, para un fichero CMake <emb>CMakeList</emb>:</p>
     86 <pre><code># Version minima requerida
     87 cmake_minimum_required (VERSION 2.8)
     88 # Nombre del proyecto
     89 project (Hola)
     90 # Ficheros a agregar
     91 add_executable(hola hola.c)</code></pre>
     92 <p>Para ejecutar CMake simplemente llamamos a su comando propio seguido del fichero CMake: <emb>cmake CMakeList</emb>. La salida de este comando será un makefile.</p>
     93 </body>
     94 </html>