Menarik, saya tidak tahu make default menggunakan kompiler C yang diberikan aturan tentang file sumber.
Bagaimanapun, solusi sederhana yang menunjukkan konsep Makefile sederhana adalah:
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
(ingatlah bahwa membuat memerlukan tab alih-alih lekukan ruang, jadi pastikan untuk memperbaikinya saat menyalin)
Namun, untuk mendukung lebih banyak file C, Anda harus membuat aturan baru untuk masing-masing file tersebut. Jadi, untuk meningkatkan:
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
Saya mencoba membuat ini sesederhana mungkin dengan menghilangkan variabel seperti $ (CC) dan $ (CFLAGS) yang biasanya terlihat di makefiles. Jika Anda tertarik untuk mencari tahu, saya harap saya sudah memberi Anda awal yang baik untuk itu.
Inilah Makefile yang saya suka gunakan untuk sumber C. Jangan ragu untuk menggunakannya:
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)
Ia menggunakan fitur wildcard dan patsubst dari make utility untuk secara otomatis memasukkan file .c dan .h dalam direktori saat ini, artinya ketika Anda menambahkan file kode baru ke direktori Anda, Anda tidak perlu memperbarui Makefile. Namun, jika Anda ingin mengubah nama executable, libraries, atau flag compiler yang dihasilkan, Anda bisa memodifikasi variabel.
Dalam kedua kasus, tolong jangan gunakan autoconf. Aku memohon Anda! :)