Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 5. Gestionar más código con Make

La utilidad GNU make, comúnmente abreviada make, es una herramienta para controlar la generación de ejecutables a partir de archivos fuente. make determina automáticamente qué partes de un programa complejo han cambiado y necesitan ser recompiladas. make utiliza archivos de configuración llamados Makefiles para controlar la forma en que se construyen los programas.

5.1. GNU make y Makefile resumen

Para crear una forma utilizable (normalmente archivos ejecutables) a partir de los archivos fuente de un proyecto concreto, realice varios pasos necesarios. Registre las acciones y su secuencia para poder repetirlas más adelante.

Red Hat Enterprise Linux contiene GNU make, un sistema de construcción diseñado para este propósito.

Requisitos previos

  • Comprender los conceptos de compilación y vinculación

GNU make

GNU make lee Makefiles que contienen las instrucciones que describen el proceso de construcción. Un Makefile contiene múltiples rules que describen una forma de satisfacer una determinada condición (target) con una acción específica (recipe). Las reglas pueden depender jerárquicamente de otra regla.

Ejecutar make sin ninguna opción hace que busque un Makefile en el directorio actual e intente alcanzar el objetivo por defecto. El nombre del archivo Makefile puede ser uno de los siguientes: Makefile, makefile, y GNUmakefile. El objetivo por defecto se determina a partir del contenido del Makefile.

Detalles del Makefile

Los Makefiles utilizan una sintaxis relativamente sencilla para definir variables y rules, que consiste en un target y un recipe. El objetivo especifica cuál es la salida si se ejecuta una regla. Las líneas con recetas deben comenzar con el carácter TAB.

Típicamente, un Makefile contiene reglas para compilar archivos fuente, una regla para enlazar los archivos objeto resultantes, y un objetivo que sirve como punto de entrada en la parte superior de la jerarquía.

Considere el siguiente Makefile para construir un programa en C que consiste en un solo archivo, hello.c.

all: hello

hello: hello.o
        gcc hello.o -o hello

hello.o: hello.c
        gcc -c hello.c -o hello.o

Este ejemplo muestra que para llegar al objetivo all, se necesita el archivo hello. Para obtener hello, se necesita hello.o (enlazado por gcc), que a su vez se crea a partir de hello.c (compilado por gcc).

El objetivo all es el objetivo por defecto porque es el primer objetivo que no comienza con un punto (.). Ejecutar make sin ningún argumento es entonces idéntico a ejecutar make all, cuando el directorio actual contiene este Makefile.

Típico makefile

Un Makefile más típico utiliza variables para la generalización de los pasos y añade un objetivo "clean" - eliminar todo excepto los archivos de origen.

CC=gcc
CFLAGS=-c -Wall
SOURCE=hello.c
OBJ=$(SOURCE:.c=.o)
EXE=hello

all: $(SOURCE) $(EXE)

$(EXE): $(OBJ)
        $(CC) $(OBJ) -o $@

%.o: %.c
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -rf $(OBJ) $(EXE)

Para añadir más archivos fuente a dicho Makefile sólo es necesario añadirlos a la línea donde se define la variable SOURCE.

Recursos adicionales