Add Makefile
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# ---------- Variables --------- #
|
||||
|
||||
# Target directory
|
||||
BUILD = build
|
||||
|
||||
# Paths to source, include, dependency, and object files
|
||||
SRC = src
|
||||
INC = src/include
|
||||
DEP = $(BUILD)/dep
|
||||
OBJ = $(BUILD)/obj
|
||||
ALL = $(SRC) $(INC) $(BUILD) $(DEP) $(OBJ)
|
||||
|
||||
# Executable
|
||||
TARGET := $(BUILD)/main.out
|
||||
|
||||
# compiler and compiler flags
|
||||
CC = clang++
|
||||
CFLAGS = -I$(INC) -std=gnu++26
|
||||
SOFLAG = -fpic -shared -dynamic -ldl
|
||||
|
||||
# list of static object files
|
||||
SOURCES = $(wildcard $(SRC)/*.cc)
|
||||
HEADERS = $(wildcard $(INC)/*.hh)
|
||||
OBJECTS = $(addprefix $(OBJ)/,$(notdir $(SOURCES:.cc=.o)))
|
||||
|
||||
# ----------- Targets ---------- #
|
||||
# Some targets aren't real
|
||||
.PHONY: all clean run dump bear
|
||||
# Don't autodelete object files:
|
||||
.PRECIOUS: $(OBJ)/%.o
|
||||
|
||||
all: $(BUILD) $(DEP) $(OBJ) $(TARGET)
|
||||
|
||||
dump:
|
||||
@echo "SOURCES: $(SOURCES)"
|
||||
@echo "HEADERS: $(HEADERS)"
|
||||
@echo "OBJECTS: $(OBJECTS)"
|
||||
@echo " TARGET: $(TARGET)"
|
||||
@echo " PATHS: $(ALL)"
|
||||
|
||||
clean:
|
||||
-rm -r $(BUILD)
|
||||
|
||||
bear: clean
|
||||
bear -- make all
|
||||
|
||||
run: $(TARGET)
|
||||
-$(addprefix ./,$(addsuffix ;,$(TARGET)))
|
||||
|
||||
fmt:
|
||||
clang-format --verbose -i $(SOURCES) $(HEADERS)
|
||||
|
||||
# Create directories for output
|
||||
$(BUILD) $(DEP) $(OBJ):
|
||||
mkdir -p $@
|
||||
|
||||
# Make the executable
|
||||
$(BUILD)/%.out: $(OBJECTS)
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
# Make the plugins
|
||||
$(BUILD)/%.so: $(OBJ)/%.o $(DEP) $(OBJ)
|
||||
$(CC) $(CFLAGS) $(SOFLAG) -o $@ $^
|
||||
# Make the object and dependency files
|
||||
$(OBJ)/%.o: $(SRC)/%.cc $(DEP) $(OBJ)
|
||||
$(CC) $(CFLAGS) -MMD -MF $(DEP)/$(@F:.o=.d) -o $@ -c $<
|
||||
|
||||
|
||||
# --------- Dependency inclusions --------- #
|
||||
-include $(wildcard $(DEP)/*.d)
|
||||
Reference in New Issue
Block a user