Articles
Software
Gallery
Other works
Contacts

#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.