InicioLinuxCrear un makefile para C++
Hola a todos, antes que nada quiero comentar que luego de muchos años de utilizar taringa! mas como una wiki que como una red social he optado por crear mi primer post como un tutorial. Por tanto, luego de buscar por estos lados un tutorial de como craar un archivo make y no encontrarlo, he decidido aportar lo que aprendí en estos días.
A continuación pasaré a explicar brevemente que es un archivo make, como utilizarlo y mediante un ejemplo como se compone.

1) ¿Qué es un archivo MAKE?

Un archivo make (makefile) es un archivo de texto el cual contiene una sintaxis determinada que son utilizados por MAKE para la gestión de la compilación de programas que mayormente estan compuestos por varios archivos de código.
MAKE (según wikipedia) es una herramienta de gestión de dependencias, típicamente, las que existen entre los archivos que componen el código fuente de un programa, para dirigir su recompilación o "generación" automáticamente. Si bien es cierto que su función básica consiste en determinar automáticamente qué partes de un programa requieren ser recompiladas y ejecutar los comandos necesarios para hacerlo, también lo es que Make puede usarse en cualquier escenario en el que se requiera, de alguna forma, actualizar automáticamente un conjunto de archivos a partir de otro, cada vez que éste cambie.

2) ¿Cómo crear un archivo MAKE?

Un archivo make, debe ser creado en el directorio raíz del proyecto llevando como nombre la palabra clave makefile el cual contendrá el conjunto de reglas o instrucciones de compilación a realizar.

3) ¿Qué contiene un archivo MAKE?

El archivo make, desarrollado de una manera prolija y eficiente, podemos describirlo en dos partes. Por un lado contiene la declaración de variables y por otro el conjunto de reglas.

4) Ejemplo.

Para ejemplificar el uso de un archivo MAKE, utilizaré la siguiente estructura de proyecto.

Crear un makefile para C++

Como se ve en la imagen, el proyecto contiene dos archivos C++ y dos librerias. El ejemplo lo planifiqué de este modo para lograr el mayor uso de la herramienta make

4.1) Ejemplo - Declaración de variables.

Como regla general, se recomienda la utilización de variables, por ejemplo para describir el tipo de codificación, nombres comunes, etc.
Para ello procederemos a declarar, primero como compilaremos el programa

CXX = g++

Si utilizaremos flags o directivas determinadas, tambien se recomienda la utilización de variables, las cuales podrían ser

CXXFLAGS = -std=c++11

Luego pasaremos a declarar variables propias de los nombres que utilizaremos en el programa tal como

DIRECTORIO = librerias
LIB_1= libreria1
LIB_2 = libreria1

CODIGO1 = codigo1
CODIGO2 = codigo2


Por último, ya podremos, a modo de ejemplo utilizar las varibles para definir la locación de las librerias a utilizar, tal como

LIBS = $(DIRECTORIO)/$(LIB_1).o $(DIRECTORIO)/$(LIB_2).o

4.2) Ejemplo - Creación de reglas.

A continuación detallaremos las reglas, las cuales son las palabras claves que se utilizaran al momento de invocar a make. En cada regla se definirán las "tareas" que queramos que realice el makefile. Por ejemplo, nuestro make compilará los codigos por separado, creará los archivos objetos de las librerias, eliminará los archivos temporales del directorio principal y también realizará todas estas tareas en conjunto.
Para definir una regla, se realiza escribiendo el nombre seguido de dos puntos (":") y debajo luego de un TAB la tarea que queremos que realice.
Entonces por ejemplo para el codigo1.cpp queremos realizar una compilacion como la siguiente

g++ librerias/libreria1.o librerias/libreria2.o codigo1.cpp -o codigo1 -std=c++11

Por tanto definiremos la siguiente regla

codigo1:
$(CXX) $(LIBS) $(CODIGO1).cpp -o $(CODIGO1) $(CXXFLAGS)


Analogamente para el codigo1.cpp

codigo2:
$(CXX) $(LIBS) $(CODIGO2).cpp -o $(CODIGO2) $(CXXFLAGS)


En cuanto a las librerias, debemos crear un makefile en el directorio correspondiente donde se encuentren y luego invocarlo desde el principal (este archivo se crea de forma analogá al que detallamos aquí). El cual contendrá la suguiente regla


crear:
$(CXX) -c $(LIB_1).cpp
$(CXX) -c $(LIB_2).cpp


Para invocarla desde el código principal debemos indicar que se ubica en un subdirectorio, para ello se procede de la siguiente forma.

libs:
$(MAKE) -C $(DIRECTORIO) crear


Como se detallo mas arriba, también incluiremos una instrucción que limpie los archivos que creemos que no son necesarios, para ello creamos una regla como la siguiente

clean:
rm *.o *.~ *~

Y por último, creamos una regla que realice todas las tareas en conjunto.

En definitiva, nuestro código quedará como el siguiente


programacion c

Como se ve en la imagen, tambien utilizo una directiva

.PHONY: codigo1 codigo2 libs all

Esto sirve para indicarle a make que realice las reglas mas allá que no lo crea necesario, es decir, si los archivos que queremos crear ya están creados make se da cuenta y opta por no realizar la operación. Aunque esto es muy útil de obviar al momento de desarrollar un proyecto.

5) Utilización del archivo MAKE.

Ahora que ya tenemos creado nuestro archivo, podemos proceder a utilizarlo de la siguiente forma.
Si queremos crear solamente las librerias o alguno de los códigos en particular, utilizamos

~/proyecto/librerias$make libs

~/proyecto$make codigo1

~/proyecto$make codigo2


Si queremos solamente realizar una "limpieza"

~/proyecto/librerias$make clean

Y si deseamos realizar todas las tareas al mismo tiempo

~/proyecto/librerias$make all

6) Para saber mas sobre la herramienta make


* http://es.wikipedia.org/wiki/Make

*

*

* http://macprogramadores.org/?q=tutoriales


Bueno, espero que haya sido de ayuda. Cualquier consulta comenten!
Datos archivados del Taringa! original
104puntos
258visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

j
jorge_pasto🇦🇷
Usuario
Puntos0
Posts1
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.