Mochis NoticiasTecnologíaModelo Makefile para una biblioteca compartida en C (con explicaciones)
Mochis NoticiasTecnologíaModelo Makefile para una biblioteca compartida en C (con explicaciones)
Tecnología

Modelo Makefile para una biblioteca compartida en C (con explicaciones)

Modelo Makefile para una biblioteca compartida en C (con explicaciones)

Última actualización el 28 de octubre de 2019

tl; dr: Guarde el siguiente archivo como Makefile y cambie los archivos fuente por los que desee.

# Makefile template for a shared library in C
# https://www.topbug.net/blog/2019/10/28/makefile-template-for-a-shared-library-in-c-with-explanations/

CC = gcc  # C compiler
CFLAGS = -fPIC -Wall -Wextra -O2 -g  # C flags
LDFLAGS = -shared   # linking flags
RM = rm -f   # rm command
TARGET_LIB = libtarget.so  # target lib

SRCS = main.c src1.c src2.c  # source files
OBJS = $(SRCS:.c=.o)

.PHONY: all
all: ${TARGET_LIB}

$(TARGET_LIB): $(OBJS)
	$(CC) ${LDFLAGS} -o $@ $^

$(SRCS:.c=.d):%.d:%.c
	$(CC) $(CFLAGS) -MM $< >$@

include $(SRCS:.c=.d)

.PHONY: clean
clean:
	-${RM} ${TARGET_LIB} ${OBJS} $(SRCS:.c=.d)

El fragmento de código anterior también está disponible en GitHub gist.

Explicación

Proceso básico: para cada archivo fuente C (example.c), el compilador de C, con el -MM switch, crea un archivo de reglas (example.d). El archivo de reglas describe las dependencias (por ejemplo, archivos de encabezado) del archivo objeto (example.o) correspondiente al archivo fuente C. Luego, el compilador C compila cada archivo fuente C en un archivo objeto. El vinculador vincula todos los archivos objeto de la biblioteca compartida.

  1. Líneas 4 a 8: el comando del compilador, los indicadores del compilador, los indicadores del vinculador, el comando de eliminación y el nombre de la biblioteca de destino, respectivamente.
  2. Línea 10: La lista de archivos fuente.
  3. Línea 11: Archivos objeto, deducidos de la lista de archivos fuente reemplazando el .c sufijo con .o.
  4. Líneas 13-14: El all El objetivo depende del objetivo de la biblioteca de destino. En otras palabras, la construcción del all objetivo, que es el predeterminado cuando funciona maketendrá la biblioteca de destino construida.
  5. Línea 16: La biblioteca de destino depende de la presencia de todos los archivos de objetos.
  6. Línea 17: Construya la biblioteca de destino ($@) aplicando el comando del compilador especificado ($(CC)) con los indicadores del enlazador especificados ($(LDFLAGS)) para todos los archivos de objetos ($^).
  7. Línea 19: Hay un archivo de reglas (*.d) para cada archivo fuente C. Su nombre de archivo se determina reemplazando el .c sufijo con .d.
  8. Línea 20: cree cada archivo de reglas ($@) aplicando a su correspondiente archivo fuente C ($<) el comando del compilador especificado ($(CC)) con los indicadores del compilador especificados ($(CFLAGS)) y el -MM bandera.
  9. Línea 22: Incluya los archivos de reglas como parte del Makefile.
  10. Líneas 24-26: El clean target, que elimina todos los archivos generados (${TARGET_LIB}, ${OBJS}, $(SRCS:.c=.d)) usando el comando eliminar (${RM}). Esto puede ser invocado por make clean.

Esta entrada fue publicada en C/C++, GNU el de hong.

Modelo Makefile para una biblioteca compartida en C (con explicaciones)

Acerca de Hong

El mantenedor de topbug.net.

Source link

Hi, I’m Corina Guzman

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *