hello.o: hello.c /usr/include/stdio.h gcc -c hello.cHierin vertellen we dat hello.o uit hello.c gemaakt moet worden via het commando
gcc -c hello.c
. Voor de rest geven we aan dat als
hello.o nieuwer is dan hello.c en /usr/include/stdio.h
het niet meer hoeft te gebeuren.
hello: hello.o gcc -o hello hello.o
Als we dan boven aan het makefile de volgende regel toe voegen:
all: helloDan kunnen we gewoon make aanroepen en hello word gecompileerd.
target: dependicies -> commando -> commandoHierin vertellen we dat make een target moet maken als een van de dependices nieuwer is dan het target. Dat moet hij dan doen door de onderstaande commando's uit te voeren.
NAAM=WaardeHiermee ken je een waarde toe aan een variabbele die je later via
${NAAM}
weer kunt gebruiken.
De belangrijkste extra targets die vaak voor komen zijn:
CFLAGS=-O2 BINDIR=/usr/local/bin SRCS=hello.c OBJS=$(SRCS:.c=.o) CFLAGS=-O2 BINDIR=/usr/local/bin SRCS=hello.c PROG=hello CP=cp RM=rm -f ${PROG}: ${OBJS} install: ${CP} ${PROG} ${BINDIR} clean: ${RM} ${PROG} ${OBJS}We defineren hier eerst een aantal variabbele. Hierbij maken we nog gebruik van een substitutie mechanisme om de variabbele OBJS de waarde te geven van SRCS met de .c vervangen door .o. Daarna geven we aan dat ons programma afhankelijk is van de object files. Hiermee weet make verder via de ingebouwde regels wel hoe dit gecompileerd moet worden.
Voor de rest defineren we nog regels voor de installatie en het opruimen
van de objectfiles.
Ingewikkeld?
We weten dat we in dit geval het geheel kunnen compileren met
gcc -o hello hello.c. Dit is in dit geval dus een hopeloos
ingewikkelde manier van het opschrijven hoe het programma gecompileerd
moet worden. Maar in de praktijk met programma's bestaande uit vele
c en header files en eigen libries blijkt make toch makelijk te werken.