I recently wrote down a short introduction to GNU make (in French). If you already understand the rules of the following Makefile, it’s actually not worth reading it ;-) But here is the practical use case:
SRC = *.c OBJ = $(SRC:.c=.o) BIN = mybin CFLAGS = -Wall -O2 all: $(BIN) $(BIN): $(OBJ) gcc $^ $(CFLAGS) -o $@ %.o: %.c gcc -c $^ $(CFLAGS) -o $@
This simple Makefile will look for all C files in its directory, compile them
to intermediate object files, then gather all these object files into one
binary called mybin
. Assuming you put the Makefile and C files together
in the same folder, all you have to do is run:
$ make
This will call the default all
rule, which depends on the binary,
triggering the $(BIN)
rule, which depends on all object files. Since
there is a generic rule to compile %.o
files from %.c
files,
Make will automatically infer what it should do, compile the source files into
objects, then bind them all into the binary. Mission accomplished.
I hope this template can be as handy for you as it is for me. I always forget
the special variables ($^
and $@
) required to write down the generic
rule, so I keep the template here and come back to copy-paste it once in a
while ;-)
Discussion ¶
Feel free to post a comment by e-mail using the form below. Your e-mail address will not be disclosed.