changequote([,]) cflags = ifdef([PROD], [], [-std=c99 -Wall -Wextra -g -D_DEFAULT_SOURCE]) bin = bin m4flags = # build as library rule cc command = gcc $cflags $in -o $out rule obj command = gcc -MD -MF $out.d $cflags -c $in -o $out depfile = $out.d rule ar command = ar rcs $out $in rule m4 command = m4 $m4flags $in > $out build $bin/msgpack.o: obj msgpack.c build $bin/libmsgpack.a: ar $bin/msgpack.o build $bin/libmsgpack.so: cc $bin/msgpack.o cflags = $cflags -fPIC -shared build $bin/libmsgpack.h: m4 msgpack.h | msgpack.c m4flags = -D SOURCE=msgpack.c # testing rule valgrind command = valgrind -s --leak-check=full --show-leak-kinds=all $in build $bin/test.o: obj test.c build $bin/test: cc msgpack.c $bin/test.o # named targets rule cpy command = cp $in $out build $bin/msgpack.h: cpy msgpack.h build static: phony $bin/libmsgpack.a | $bin/msgpack.h build shared: phony $bin/libmsgpack.so | $bin/msgpack.h build header: phony $bin/libmsgpack.h build test: valgrind $bin/test ifdef([PROD], [default header], [default test]) # regeneration rule gen command = m4 $m4flags ninja.m4 > build.ninja generator = 1 build build.ninja: gen | ninja.m4 rule _clean command = ninja -t clean build clean: _clean ifdef([PROD], [dnl build dev: gen | clean ], [dnl build prod: gen | clean m4flags = -D [PROD] ])