# makefile for single source file app (from my1codeapp) ALLAPP = $(subst .c,,$(wildcard *.c)) ALLAPP += $(subst .cpp,,$(wildcard *.cpp)) TARGET ?= TGTLBL ?= $(TARGET) ifeq ($(TGTLBL),) TGTLBL = app endif OBJLST ?= DOFLAG ?= DOLINK ?= CC = gcc CP = g++ DELETE = rm -rf CFLAGS += -Wall # i prefer to build static bin CFLAGS += -static LFLAGS += $(LDFLAGS) OFLAGS += # when working with large files XFLAGS += -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 ifneq ($(DOFLAG),) CFLAGS += $(DOFLAG) endif ifneq ($(DOLINK),) LFLAGS += $(DOLINK) endif # i can still squeeze in some external code(s) => OBJLST! EXTPATH = /home/share/store/repomine/my1codelib/src ifneq ($(wildcard $(EXTPATH)),) CFLAGS += -I$(EXTPATH) endif .PHONY: dummy $(TARGET) # TARGET can be temporary code (reside at top level) $(TARGET): $(OBJLST) $(TARGET).o $(CC) $(CFLAGS) -o $(TGTLBL) $^ $(LFLAGS) $(OFLAGS) dummy: @echo "Run 'make ' or 'make TARGET='" @echo " = { $(ALLAPP) }" @echo @echo "To set compiler flag (e.g. static), do 'make DOFLAG=-static'" @echo "To link a library (e.g. math), do 'make DOLINK=-lm'" %: %.c $(CC) $(CFLAGS) -o $@ $< $(LFLAGS) $(OFLAGS) %: %.cpp $(CP) $(CFLAGS) -o $@ $< $(LFLAGS) $(OFLAGS) # to compile those external code(s) => OBJLST! %.o: $(EXTPATH)/%.c $(EXTPATH)/%.h $(CC) -c $(CFLAGS) -o $@ $< clean: -$(DELETE) $(ALLAPP) $(TGTLBL) *.o