CC = clang CFLAGS = -Wall LDFLAGS = -lm BUILDDIR = build SOURCEDIR = src OBJECTDIR = obj OUTPUT = dns SRCS = $(wildcard $(SOURCEDIR)/*.c) OBJS = $(SRCS:.c=.o) OBJ = $(OBJS:$(SOURCEDIR)/%=$(OBJECTDIR)/%) build: dir $(OBJ) @echo [LD] $(OBJ) @$(CC) $(CFLAGS) -o $(BUILDDIR)/$(OUTPUT) $(OBJ) $(LDFLAGS) debug: CFLAGS += -g -D _DEBUG debug: build; test: CFLAGS += -D _TEST test: clean debug $(BUILDDIR)/$(OUTPUT) dir: @mkdir -p $(OBJECTDIR) @mkdir -p $(BUILDDIR) $(OBJECTDIR)/%.o: $(SOURCEDIR)/%.c @echo [CC] $< @$(CC) $(CFLAGS) -c $< -o $@ #sudo setcap 'cap_net_bind_service=+ep' /path/to/prog #to allow port access run: build $(BUILDDIR)/$(OUTPUT) .PHONY: clean clean: @echo [RM] $(OBJ) @echo [RM] $(BUILDDIR)/$(OUTPUT) @rm -df $(OBJ) @rm -Rdf $(BUILDDIR) $(OBJECTDIR) .PHONY: all all: clean build