C Academy · leksjon

Makefiler

Automatiser bygget

Leksjon 3 av 413 trinn

Makefiler er en gratis leksjon i C Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C Academy inneholder totalt 4 leksjoner.

Hvorfor Makefiles

Det blir raskt uhåndterlig å skrive gcc-kommandoer for hånd. make leser en Makefile som beskriver hvordan prosjektet skal bygges, og kjører bare kommandoene som trengs.

Den viktigste funksjonen er at den bygger en fil på nytt bare når inndataene er nyere enn utdataene, noe som sparer mye kompileringstid.

Regelens oppbygning

En regel har tre deler: et mål, dets forutsetninger og en oppskrift.

Oppskriftslinjen MÅ begynne med et ekte TAB-tegn, ikke mellomrom. Dette er den klart vanligste Makefile-feilen.

target: prerequisite1 prerequisite2
	<TAB>command to build target

En første Makefile

Denne bygger app fra to kildefiler. Når make kjøres uten argumenter, bygges det første målet.

Hvis ingen av kildefilene er endret siden forrige bygging, skriver make ut «up to date» og gjør ingenting.

app: main.c math_utils.c
	gcc main.c math_utils.c -o app

Regler for separat kompilering

Når hvert objekt bygges separat, kompileres bare den aktuelle filen på nytt hvis én fil endres.

make følger avhengighetsgrafen: Endres main.c, kjøres bare main.o og den endelige linkingen på nytt.

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.c

Variabler

Variabler fjerner gjentakelser. Definer dem øverst, og utvid dem med $(NAME).

Da kan kompilatoren eller flaggene endres på ett sted.

CC = gcc
CFLAGS = -Wall -Wextra -g

app: main.o math_utils.o
	$(CC) main.o math_utils.o -o app

Automatiske variabler

make tilbyr kortformer i oppskrifter:

  • $@ — målnavnet
  • $^ — alle forutsetningene
  • $< — den første forutsetningen

De holder oppskriftene korte og korrekte.

app: main.o math_utils.o
	$(CC) $^ -o $@

main.o: main.c
	$(CC) $(CFLAGS) -c $< -o $@

Mønsterregler

Én mønsterregel kompilerer alle .c-filer til tilsvarende .o-filer, slik at De slipper å skrive én regel per fil.

% samsvarer med et vilkårlig stamnavn; sammen med $< og $@ blir regelen helt generell.

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

Fiktive mål

Mål som clean produserer ikke en fil med dette navnet. Deklarer dem som .PHONY, slik at make alltid kjører dem, selv om det finnes en fil som heter «clean».

clean fjerner byggeartefakter for å tvinge frem en ren bygging.

.PHONY: clean
clean:
	rm -f *.o app

En komplett Makefile

Alt satt sammen: variabler, en mønsterregel, en linkeregel og et fiktivt clean-mål.

Dette kan skaleres til mange filer uten endringer per fil.

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) app

Hvordan make avgjør

make sammenligner tidsstempler. Et mål bygges på nytt hvis en forutsetning har en nyere endringstid, eller hvis målet ikke finnes.

Derfor er det viktig å oppgi avhengigheter til headerfiler: Rediger en headerfil, så bygges alle avhengige objektfiler korrekt på nytt.

Flere mål og standardmål

Det første målet i en Makefile er standardmålet og kjøres når De skriver make uten argumenter. Etter konvensjonen heter det all.

De kan også bygge et bestemt mål ved navn, for eksempel make clean eller make test, slik at én Makefile får flere nyttige inngangspunkter.

.PHONY: all
all: app

test: app
	./app --selftest

Kort kontroll

Finn årsaken til en klassisk Makefile-feil.

Oppsummering

De kan nå automatisere bygginger med make:

  • Regler består av mål, forutsetninger og en TAB-innrykket oppskrift
  • Variabler og automatiske variabler ($@ $^ $<) reduserer gjentakelser
  • Mønsterregler (%.o: %.c) håndterer alle filer generelt
  • .PHONY markerer mål som ikke er filer, for eksempel clean
  • make bygger bare det som er utdatert, basert på tidsstempler

Deretter: bygging av statiske og delte biblioteker.

Gratis å komme i gang

Lær deg C med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
144

Ofte stilte spørsmål

Er leksjonen «Makefiler» gratis?

Ja – hele teksten i «Makefiler» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Makefiler»?

Automatiser bygget Du øver på C Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C Academy?

Ingen tidligere erfaring er nødvendig. C Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Makefiler»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C Academy-leksjonen?

Ja. Alle C Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Betinget kompilering
  2. Prosjekter med flere filer
  3. Makefiler
  4. Statiske og delte biblioteker
← Tilbake til C Academy