Makefile'lar
Derlemeyi otomatikleştirin
Makefile'lar, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.
Makefile'lar Neden Kullanılır
gcc komutlarını elle yazmak kısa sürede yönetilemez hâle gelir. make, projenizin nasıl derleneceğini açıklayan bir Makefile dosyasını okur ve yalnızca gereken komutları çalıştırır.
En önemli özelliği şudur: Bir dosyayı yalnızca girdileri çıktısından daha yeniyse yeniden derler ve böylece büyük miktarda derleme süresi kazandırır.
Kuralın Yapısı
Bir kural üç bölümden oluşur: bir hedef, bu hedefin ön koşulları ve bir tarifi.
Tarif satırı boşluklarla değil, gerçek bir TAB karakteriyle başlamalıdır. Bu, Makefile'larda yapılan en yaygın hatadır.
target: prerequisite1 prerequisite2
<TAB>command to build targetİlk Makefile
Bu dosya, iki kaynak dosyasından app programını oluşturur. make komutunu bağımsız bir değişken olmadan çalıştırmak ilk hedefi oluşturur.
Son derlemeden beri kaynak dosyaların hiçbiri değişmediyse make, 'up to date' yazdırır ve hiçbir işlem yapmaz.
app: main.c math_utils.c
gcc main.c math_utils.c -o appAyrı Derleme Kuralları
Her nesne dosyasını ayrı oluşturmak, bir dosyadaki değişikliğin yalnızca o dosyanın yeniden derlenmesini sağlar.
make, bağımlılık grafiğini izler: main.c değişirse yalnızca main.o ve son bağlama işlemi yeniden çalıştırılır.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.c
math_utils.o: math_utils.c math_utils.h
gcc -c math_utils.cDeğişkenler
Değişkenler tekrarı ortadan kaldırır. Bunları en üstte tanımlayın ve $(NAME) ile genişletin.
Böylece derleyiciyi veya seçenekleri değiştirmek tek bir yerde yapılır.
CC = gcc
CFLAGS = -Wall -Wextra -g
app: main.o math_utils.o
$(CC) main.o math_utils.o -o appOtomatik Değişkenler
make, tariflerin içinde kullanılmak üzere kısa gösterimler sağlar:
$@— hedef adı$^— tüm ön koşullar$<— ilk ön koşul
Bunlar tarifleri kısa ve doğru tutar.
app: main.o math_utils.o
$(CC) $^ -o $@
main.o: main.c
$(CC) $(CFLAGS) -c $< -o $@Kalıp Kuralları
Tek bir kalıp kuralı her .c dosyasını karşılık gelen .o dosyasına derler; böylece her dosya için ayrı bir kural yazmayı bırakırsınız.
% herhangi bir gövdeyle eşleşir; $< ve $@ ile birlikte tamamen genel amaçlı olur.
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@Sahte Hedefler
clean gibi hedefler, kendi adlarında bir dosya oluşturmaz. Bunları .PHONY olarak bildirin; böylece 'clean' adında bir dosya bulunsa bile make bunları her zaman çalıştırır.
clean, yeni bir derlemeyi zorlamak için derleme çıktılarını kaldırır.
.PHONY: clean
clean:
rm -f *.o appEksiksiz Bir Makefile
Hepsini bir araya getirelim: değişkenler, bir kalıp kuralı, bir bağlama kuralı ve bir sahte temizleme hedefi.
Bu yapı, dosya başına düzenleme yapmadan çok sayıda dosyaya ölçeklenebilir.
CC = gcc
CFLAGS = -Wall -Wextra -g
OBJS = main.o math_utils.o
app: $(OBJS)
$(CC) $^ -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -f $(OBJS) appmake Nasıl Karar Verir
make zaman damgalarını karşılaştırır. Ön koşullardan herhangi birinin daha yeni bir değiştirilme zamanı varsa veya hedef mevcut değilse hedef yeniden oluşturulur.
Başlık bağımlılıklarını listelemenin önemli olmasının nedeni budur: Bir başlığı düzenlediğinizde, ona bağlı her nesne doğru şekilde yeniden oluşturulur.
Birden Çok Hedef ve Varsayılanlar
Bir Makefile içindeki ilk hedef varsayılandır ve yalnızca make yazdığınızda çalıştırılır. Geleneksel olarak adı all olur.
Ayrıca make clean veya make test gibi belirli bir hedefi adıyla oluşturabilirsiniz. Böylece tek bir Makefile birçok kullanışlı giriş noktası sağlar.
.PHONY: all
all: app
test: app
./app --selftestKısa Kontrol
Klasik bir Makefile hatasını teşhis edin.
Özet
Artık derlemeleri make ile otomatikleştirebilirsiniz:
- Kurallar; hedef, ön koşullar ve TAB ile girintilenmiş bir tariften oluşur
- Değişkenler ve otomatik değişkenler (
$@ $^ $<) tekrarı azaltır - Kalıp kuralları (
%.o: %.c) her dosyayı genel biçimde işler .PHONY,cleangibi dosya olmayan hedefleri belirtir- make, zaman damgasına göre yalnızca güncel olmayanları yeniden oluşturur
Sırada: statik ve paylaşımlı kütüphaneler oluşturmak var.
Sıkça Sorulan Sorular
“Makefile'lar” dersi ücretsiz mi?
Evet — “Makefile'lar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.
“Makefile'lar” dersinde ne öğreneceğim?
Derlemeyi otomatikleştirin C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Makefile'lar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.