Utilice Makefile en C++

Jinku Hu 13 mayo 2021
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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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