johnstowers.co.nz ~ / blog / make quick reference

Make Quick Reference

This page contains a minimal GNU Make reference, adapted for my use from

Automatic Variables:

Here is a summary of the automatic variables. See Automatic Variables , for full information.

$@    The file name of the target.
$%    The target member name, when the target is an archive member.
$<    The name of the first prerequisite.
$?    The names of all the prerequisites that are newer than the target, with spaces between them.
$+
$^    The names of all the prerequisites, with spaces between them.

The value of $^ omits duplicate prerequisites, while $+ retains them and preserves their order.

Automatic Rules:

  • Compiling C programs

n.o is made automatically from n.c with a recipe of the form $(CC) $(CPPFLAGS) $(CFLAGS) -c

  • Compiling C++ programs

n.o is made automatically from n.c with a recipe of the form $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c

Example:

all: test libtest.so

libtest.so: libtest.o
    $(CC) -shared -o $@ $< -lc

test: test_main.c libtest.o
    $(CC) -o $@ $?

** Defining Rules:**

%.pdf: %.svg inkscape -Cz –export-pdf=$@ –file=$<

objects = foo.o bar.o

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