#Compiler, Archiver and Linker CC := g++ AR := ar ARFLAGS := rcs #The Target Static Library #Conventionally, static libraries start with 'lib' and end in '.a' TARGET := libdesktoplib.a #The Directories, Source, Includes, Objects, Binary and Resources SRCDIR := src BUILDDIR := bin TARGETDIR := out SRCEXT := cpp DEPEXT := d OBJEXT := o #Flags, Libraries and Includes ROOT := ./ CFLAGS := -std=c++20 -O2 \ -Wall -Werror -Wextra \ -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align \ -Wunused -Woverloaded-virtual -Wconversion \ -Wsign-conversion -Wnull-dereference -Wdouble-promotion \ -Wformat=2 -Wimplicit-fallthrough -Wsuggest-override \ -Wextra-semi -Wduplicated-cond -Wduplicated-branches \ -Wlogical-op -Wuseless-cast INC := -I./src/ #--------------------------------------------------------------------------------- #DO NOT EDIT BELOW THIS LINE #--------------------------------------------------------------------------------- SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT)) OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.$(OBJEXT))) #Default Make all: directories $(TARGET) #Remake remake: cleaner all #Make the Directories directories: @mkdir -p $(TARGETDIR) @mkdir -p $(BUILDDIR) #Clean only Objects clean: @$(RM) -rf $(BUILDDIR) #Full Clean, Objects and Binaries cleaner: clean @$(RM) -rf $(TARGETDIR) #Pull in dependency info for *existing* .o files -include $(OBJECTS:.$(OBJEXT)=.$(DEPEXT)) #Create Static Library (Archive) $(TARGET): $(OBJECTS) $(AR) $(ARFLAGS) $(TARGETDIR)/$(TARGET) $^ #Compile $(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT) @mkdir -p $(dir $@) $(CC) $(CFLAGS) $(INC) -c -o $@ $< @$(CC) $(CFLAGS) -MM $(SRCDIR)/$*.$(SRCEXT) > $(BUILDDIR)/$*.$(DEPEXT) @cp -f $(BUILDDIR)/$*.$(DEPEXT) $(BUILDDIR)/$*.$(DEPEXT).tmp @sed -e 's|.*:|$(BUILDDIR)/$*.$(OBJEXT):|' < $(BUILDDIR)/$*.$(DEPEXT).tmp > $(BUILDDIR)/$*.$(DEPEXT) @sed -e 's/.*://' -e 's/\\$$//' < $(BUILDDIR)/$*.$(DEPEXT).tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $(BUILDDIR)/$*.$(DEPEXT) @rm -f $(BUILDDIR)/$*.$(DEPEXT).tmp #Non-File Targets .PHONY: all remake clean cleaner