Utilice Makefile en C++
Este artículo demostrará varios métodos de cómo utilizar Makefile en C++.
Utilice Makefile para compilar un programa de varios archivos fácilmente en C++
Makefile
es el nombre del archivo que describe la relación entre los archivos fuente del programa y los encabezados que se compilarán. Este archivo es utilizado por la utilidad make
que se invoca en la línea de comandos, y actúa como un mini sistema de compilación para el proyecto de código. Sin embargo, tenga en cuenta que make
no se limita al lenguaje de programación e incluso a la compilación del programa, ya que se puede utilizar en escenarios donde los archivos deben actualizarse según las modificaciones realizadas en archivos relativos. Las relaciones están representadas por el conjunto de reglas que describen las acciones específicas. El siguiente fragmento muestra la estructura de una regla típica. Un target
es comúnmente un nombre para los archivos ejecutables o de objeto. Los prerequisites
suelen ser archivos de entrada que se necesitan para generar el archivo de destino. Una recipe
es una acción realizada por el make
, y están sangradas con la pestaña en cada nueva línea. Tenga en cuenta que make
escanea el archivo llamado makefile
o Makefile
si existe en el directorio de trabajo actual.
target: prerequisites
recipe
Las reglas son la parte principal del Makefile
ya que son la única parte necesaria. El siguiente ejemplo demuestra la estructura simple de Makefile
que crea el archivo ejecutable llamado program
. Ahora, el program
tiene los prerequisites
- main.o
y library1.o
, que son archivos objeto generados por las reglas siguientes. Ambos tienen sus respectivas recetas que compilan ciertos requisitos previos para obtener el resultado dado. Tenga en cuenta que el comando g++
es el compilador GNU C++ que se ejecuta como parte de la receta y se puede construir con los argumentos habituales de la línea de comandos.
program : main.o library1.o
g++ -o program main.o library1.o
main.o : main.cpp header1.h
g++ -c main.cpp
library1.o : library1.cpp library1.h
g++ -c library1.cpp
Otra característica de Makefile
son las variables que se comportan de manera similar a las expresiones de macro del preprocesador de C++. Es decir, podemos definir alias de nombres para las cadenas que aparecen en el archivo varias veces y colocar los nombres de las variables. Por ejemplo, el siguiente fragmento muestra la variable OBJ
definida al principio del archivo, e incluye los requisitos previos del program
que se repiten en la primera regla. Sin embargo, tenga en cuenta que las variables son más eficientes cuando se sustituyen cadenas mucho más largas.
OBJ = main.o library1.o
program : $(OBJ)
g++ -o program $(OBJ)
main.o : main.cpp header1.h
g++ -c main.cpp
library1.o : library1.cpp library1.h
g++ -c library1.cpp
Además, podemos definir otras variables que pueden representar banderas del compilador o del enlazador, generalmente utilizadas en múltiples ubicaciones en el Makefile
. Por lo tanto, cuando el proyecto es grande y el Makefile
se hace más grande, es más fácil modificar la línea única que cambiar cada instancia del parámetro dado.
OBJ = main.o library1.o
CC = g++
LFLAGS = -lm
program : $(OBJ)
$(CC) -o $(LFLAGS) program $(OBJ)
main.o : main.cpp header1.h
$(CC) -c main.cpp
library1.o : library1.cpp library1.h
$(CC) -c library1.cpp
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook