Makefiles
Automatisér build-processen
Makefiles er en gratis C Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C Academy-kurset indeholder 4 lektioner i alt.
Hvorfor Makefiles
Det bliver hurtigt uoverskueligt at skrive gcc-kommandoer manuelt. make læser en Makefile, der beskriver, hvordan projektet skal bygges, og kører kun de nødvendige kommandoer.
Den vigtigste funktion er, at den kun bygger en fil igen, når dens input er nyere end outputtet, så du sparer meget kompileringstid.
En regels opbygning
En regel har tre dele: et mål, dets forudsætninger og en opskrift.
Opskriftslinjen SKAL begynde med et rigtigt TAB-tegn, ikke mellemrum. Det er den mest almindelige Makefile-fejl.
target: prerequisite1 prerequisite2
<TAB>command to build targetEn første Makefile
Denne bygger app ud fra to kildefiler. Når du kører make uden argumenter, bygges det første mål.
Hvis ingen af kildefilerne er ændret siden det seneste build, skriver make 'up to date' og gør ingenting.
app: main.c math_utils.c
gcc main.c math_utils.c -o appRegler for separat kompilering
Når hvert objekt bygges separat, betyder en ændring i én fil, at kun den fil kompileres igen.
make følger afhængighedsgrafen: Ændr main.c, så køres kun main.o og det endelige link igen.
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.cVariable
Variable fjerner gentagelser. Definér dem øverst, og udvid dem med $(NAME).
Nu foregår ændringer af compileren eller flagene ét sted.
CC = gcc
CFLAGS = -Wall -Wextra -g
app: main.o math_utils.o
$(CC) main.o math_utils.o -o appAutomatiske variable
make stiller forkortelser til rådighed i opskrifter:
$@— målets navn$^— alle forudsætninger$<— den første forudsætning
De holder opskrifterne 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 deres .o-filer, så du slipper for at skrive en regel for hver fil.
% matcher enhver stamme; kombineret med $< og $@ er reglen helt generisk.
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@Fiktive mål
Mål som clean producerer ikke en fil med det navn. Deklarér dem som .PHONY, så make altid kører dem, selv hvis der findes en fil med navnet 'clean'.
clean fjerner build-artefakter for at gennemtvinge et nyt build.
.PHONY: clean
clean:
rm -f *.o appEn komplet Makefile
Her samler vi det hele: variable, en mønsterregel, en linkregel og et fiktivt clean-mål.
Det kan skaleres til mange filer uden ændringer for hver enkelt 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) appSådan træffer make beslutninger
make sammenligner tidsstempler. Et mål bygges igen, hvis en af forudsætningerne har et nyere ændringstidspunkt, eller hvis målet ikke findes.
Derfor er det vigtigt at angive headerafhængigheder: Redigér en headerfil, så bygges alle afhængige objekter korrekt igen.
Flere mål og standardmål
Det første mål i en Makefile er standardmålet, som køres, når du skriver almindelig make. Det kaldes normalt all.
Du kan også bygge et bestemt mål ved navn, f.eks. make clean eller make test, så én Makefile får mange nyttige indgange.
.PHONY: all
all: app
test: app
./app --selftestHurtigt tjek
Find årsagen til en klassisk Makefile-fejl.
Opsummering
Du kan nu automatisere builds med make:
- Regler består af et mål, forudsætninger og en TAB-indrykket opskrift
- Variable og automatiske variable (
$@ $^ $<) reducerer gentagelser - Mønsterregler (
%.o: %.c) håndterer alle filer generisk .PHONYmarkerer mål, der ikke er filer, som f.eks.clean- make bygger kun det, der er forældet, igen ud fra tidsstempler
Næste trin: bygning af statiske og delte biblioteker.
Lær C med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 39
- Lektioner
- 144
Ofte stillede spørgsmål
Er lektionen “Makefiles” gratis?
Ja — hele teksten til “Makefiles” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Makefiles”?
Automatisér build-processen Du øver dig i C Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C Academy?
Der kræves ingen tidligere erfaring. C Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Makefiles”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C Academy-lektion?
Ja. Alle C Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.