#Anons Makefile template.html
{@begin=sh@
.PHONY: test clean
.SUFFIXES:
# --- Paths / files
SOURCE.d := source/
OBJECT.d := object/
LIB.d := library/
SOURCE := main.c h.c cpp.cpp
OBJECT := ${SOURCE}
OBJECT := $(subst .cpp,.o,${OBJECT})
OBJECT := $(subst .c,.o,${OBJECT})
GENSOURCE := l.yy.c y.tab.c
vpath %.o ${OBJECT.d}
vpath %.c ${SOURCE.d}
vpath %.c ${LIB.d}
vpath %.l ${SOURCE.d}
vpath %.y ${SOURCE.d}
vpath %.cpp ${SOURCE.d}
vpath %.yy.c ${OBJECT.d}
vpath %.tab.c ${OBJECT.d}
OUT := example
# --- Tools/Flags
ifeq (${DEBUG}, 1)
LFLAGS += --debug --trace
YFLAGS += --debug
CPPFLAGS += -DDEBUG
CFLAGS.D += -Wall -Wextra -Wpedantic
CFLAGS.D += -O0 -ggdb -fno-inline
CFLAGS.D += -fsanitize=address,undefined
CFLAGS += ${CFLAGS.D}
CXXFLAGS += ${CFLAGS.D}
else
CFLAGS += -O3 -flto=auto -fno-stack-protector
endif
CPPFLAGS += -I${SOURCE.d} -I${OBJECT.d} -I${LIB.d}
LDLIBS :=
# --- Rule Section ---
all: ${OUT}
${OUT}: ${GENSOURCE} ${OBJECT}
${LINK.cpp} -o $@ $(addprefix ${OBJECT.d}/,${OBJECT} ${GENSOURCE}) ${LDLIBS}
%.o: %.c
${COMPILE.c} -o ${OBJECT.d}/$@ $<
%.o: %.cpp
${COMPILE.cpp} -o ${OBJECT.d}/$@ $<
%.yy.c: %.l
flex -o ${OBJECT.d}/$@ --header=${OBJECT.d}/$(subst .c,.h,$@) $?
%.tab.c: %.y
bison -o ${OBJECT.d}/$@ --header=${OBJECT.d}/$(subst .c,.h,$@) $?
%.yy.o: %.yy.c
${COMPILE.c} -o ${OBJECT.d}/$@ ${OBJECT.d}/$<
%.tab.o: %.tab.c
${COMPILE.c} -o ${OBJECT.d}/$@ ${OBJECT.d}/$<
test:
cmdtest --fast
clean:
-${RM} $(or ${OBJECT.d},#)/*
-${RM} ${OUT}
# --- Notes ---
# I did not comment into the source so you may use it as a template easier.