İlginç, kaynak dosyalar ile ilgili kurallar verilen C derleyicisini varsayılan olarak kullanacağını bilmiyordum.
Her neyse, basit Makefile kavramlarını gösteren basit bir çözüm şöyle olacaktır:
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
(make'in boşluk girintisi yerine sekme gerektirdiğini unutmayın, bu yüzden kopyalarken bunu düzelttiğinizden emin olun)
Ancak, daha fazla C dosyasını desteklemek için, her biri için yeni kurallar oluşturmanız gerekir. Böylece iyileştirmek için:
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
Bunu, genellikle makefiles dosyasında görülen $ (CC) ve $ (CFLAGS) gibi değişkenleri atlayarak olabildiğince basit hale getirmeye çalıştım. Bunu anlamakla ilgileniyorsanız, umarım bu konuda size iyi bir başlangıç yapmışımdır.
İşte C kaynağı için kullanmayı sevdiğim Makefile. Kullanmaktan çekinmeyin:
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)
.C ve .h dosyalarını geçerli dizine otomatik olarak eklemek için make yardımcı programının joker karakterini ve patsubst özelliklerini kullanır, yani dizininize yeni kod dosyaları eklediğinizde Makefile'ı güncellemeniz gerekmez. Ancak, oluşturulan yürütülebilir dosyanın, kitaplıkların veya derleyici bayraklarının adını değiştirmek isterseniz, yalnızca değişkenleri değiştirebilirsiniz.
Her iki durumda da, lütfen autoconf kullanmayın. Sana yalvarıyorum! :)