43 lines
1005 B
Makefile
43 lines
1005 B
Makefile
TARGET = $(notdir $(CURDIR))
|
|
|
|
SRCEXT = .c
|
|
INCEXT = .h
|
|
OBJEXT = .o
|
|
|
|
SRCDIR = src
|
|
INCDIR = .
|
|
OBJDIR = bin
|
|
|
|
CC = gcc
|
|
LD = gcc
|
|
|
|
LDFLAGS = -lm -lpthread
|
|
CCFLAGS = -std=gnu99 -g -ggdb -Og -Wall -Wextra -pedantic
|
|
|
|
SRCTREE = $(shell find $(SRCDIR) -type d)
|
|
INCS = $(shell find $(INCDIR) -type f -name '*$(INCEXT)')
|
|
SRCS = $(shell find $(SRCDIR) -type f -name '*$(SRCEXT)')
|
|
OBJTREE = $(foreach D,$(SRCTREE),$(shell echo $(D) | sed 's/$(SRCDIR)/$(OBJDIR)/'))
|
|
OBJSTMP = $(foreach F,$(SRCS),$(shell echo $(F) | sed -e 's/$(SRCDIR)/$(OBJDIR)/'))
|
|
OBJS = $(foreach O,$(OBJSTMP),$(shell echo $(O) | sed -e 's/\$(SRCEXT)/\$(OBJEXT)/'))
|
|
|
|
all: $(TARGET)
|
|
@echo Done.
|
|
|
|
run: $(TARGET)
|
|
@./$(TARGET)
|
|
|
|
clean:
|
|
@rm -r $(TARGET) $(OBJS) $(OBJDIR) 2>/dev/null || true
|
|
|
|
$(TARGET): $(OBJS) | $(OBJDIR)
|
|
@$(LD) $(LDFLAGS) -L$(OBJDIR) -o $@ $^
|
|
|
|
$(OBJS): $(OBJDIR)/%$(OBJEXT) : $(SRCDIR)/%$(SRCEXT) | $(OBJDIR)
|
|
@$(CC) $(CCFLAGS) -I$(INCDIR) -c -o $@ $?
|
|
|
|
$(OBJDIR):
|
|
@mkdir -p $(OBJDIR) $(OBJTREE)
|
|
|
|
.PHONY: all run clean
|