ejecutar compiler compilar compilador c gcc makefile

compiler - ¿Cómo puedo hacer un simple archivo make para gcc en Linux?



makefile (6)

Dependiendo de la cantidad de encabezados y sus hábitos de desarrollo, es posible que desee investigar gccmakedep. Este programa examina su directorio actual y agrega al final del makefile las dependencias de encabezado para cada archivo .c / cpp. Esto es excesivo cuando tienes 2 encabezados y un archivo de programa. Sin embargo, si tiene más de 5 pequeños programas de prueba y está editando uno de los 10 encabezados, puede confiar en make para reconstruir exactamente esos programas que fueron modificados por sus modificaciones.

Tengo tres archivos: program.c , program.h y headers.h .

program.c incluye program.h y headers.h .

Necesito compilar esto en Linux usando el compilador gcc . No estoy seguro de cómo hacer esto. Netbeans creó uno para mí, pero está vacío.


El archivo make más simple puede ser

all : test test : test.o gcc -o test test.o test.o : test.c gcc -c test.c clean : rm test *.o


Interesante, no sabía que la opción predeterminada sería usar las reglas del compilador C sobre los archivos fuente.

De todos modos, una solución simple que demuestra conceptos simples de Makefile sería:

HEADERS = program.h headers.h default: program program.o: program.c $(HEADERS) gcc -c program.c -o program.o program: program.o gcc program.o -o program clean: -rm -f program.o -rm -f program

(tenga en cuenta que make requiere tabulación en lugar de espacio, así que asegúrese de corregirlo al copiar)

Sin embargo, para admitir más archivos C, tendría que crear nuevas reglas para cada uno de ellos. Por lo tanto, para mejorar:

HEADERS = program.h headers.h OBJECTS = program.o default: program %.o: %.c $(HEADERS) gcc -c $< -o $@ program: $(OBJECTS) gcc $(OBJECTS) -o $@ clean: -rm -f $(OBJECTS) -rm -f program

Traté de hacerlo lo más simple posible omitiendo variables como $ (CC) y $ (CFLAGS) que generalmente se ven en makefiles. Si estás interesado en averiguarlo, espero haberte dado un buen comienzo en eso.

Aquí está el Makefile que me gusta usar para la fuente C. Sientase libre de usarlo:

TARGET = prog LIBS = -lm CC = gcc CFLAGS = -g -Wall .PHONY: default all clean default: $(TARGET) all: default OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) HEADERS = $(wildcard *.h) %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c $< -o $@ .PRECIOUS: $(TARGET) $(OBJECTS) $(TARGET): $(OBJECTS) $(CC) $(OBJECTS) -Wall $(LIBS) -o $@ clean: -rm -f *.o -rm -f $(TARGET)

Utiliza las funciones wildcard y patsubst de make para incluir automáticamente los archivos .c y .h en el directorio actual, lo que significa que cuando agregue nuevos archivos de código a su directorio, no tendrá que actualizar el Makefile. Sin embargo, si desea cambiar el nombre del ejecutable generado, las bibliotecas o los indicadores del compilador, puede modificar las variables.

En cualquier caso, no use autoconf, por favor. ¡Te lo ruego! :)


Por ejemplo, este simple Makefile debería ser suficiente:

CC=gcc CFLAGS=-Wall all: program program: program.o program.o: program.c program.h headers.h clean: rm -f program program.o run: program ./program

Tenga en cuenta que debe haber <tab> en la siguiente línea después de limpiar y ejecutar, no espacios.

ACTUALIZACIÓN Comentarios a continuación aplicados


all: program program.o: program.h headers.h

es suficiente. el resto es implícito


gcc program.c -o program

no es necesario ningún archivo.