basic compile procedure
app: add.c div.c main.c mult.c sub.c
gcc -o app add.c div.c main.c mult.c sub.c
split into compile and link procedures
app: add.o div.o main.o mult.o sub.o
gcc -o app add.o div.o main.o mult.o sub.o
add.o: add.c
gcc -c add.c -o add.o
div.o: div.c
gcc -c div.c -o div.o
main.o: main.c
gcc -c main.c -o main.o
mult.o: mult.c
gcc -c mult.c -o mult.o
sub.o: sub.c
gcc -c sub.c -o sub.o
use self-defined variables and pre-defined variables
target=app
$(target): add.o div.o main.o mult.o sub.o
$(CC) -o $@ $^
add.o: add.c
$(CC) -c $< -o $@
div.o: div.c
$(CC) -c $< -o $@
main.o: main.c
$(CC) -c $< -o $@
mult.o: mult.c
$(CC) -c $< -o $@
sub.o: sub.c
$(CC) -c $< -o $@
pattern matching
target=app
$(target): add.o div.o main.o mult.o sub.o
$(CC) -o $@ $^
%.o: %.c
$(CC) -c $< -o $@
use functions
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target): $(objs)
$(CC) -o $@ $^
%.o: %.c
$(CC) -c $< -o $@
add clean target
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target): $(objs)
$(CC) -o $@ $^
%.o: %.c
$(CC) -c $< -o $@
clean:
rm $(objs) -f
change to phony dependency
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target): $(objs)
$(CC) -o $@ $^
%.o: %.c
$(CC) -c $< -o $@
.PHONY:clean
clean:
rm $(objs) -f