Skip to content
Snippets Groups Projects
makefile 1.05 KiB
Newer Older
T.Wadi's avatar
T.Wadi committed
COMPILATION_MODE ?= Debug
ENABLE_WARNINGS ?= 1
WARNINGS_AS_ERRORS ?= 0
EXECUTABLE_PREFIX ?= main
C_COMPILER ?= gcc 
C_STANDARD ?= gnu11 

ifeq ($(COMPILATION_MODE), Debug)
C_COMPILER_FLAGS = -g -O0 -std=$(C_STANDARD)
EXECUTABLE_NAME = $(EXECUTABLE_PREFIX)Debug

ifeq ($(ENABLE_WARNINGS), 1)
C_COMPILER_FLAGS += -Wall -Wextra -Wpedantic -Wconversion
endif

else
C_COMPILER_FLAGS = -O3 -Wall -std=$(C_STANDARD)
EXECUTABLE_NAME = $(EXECUTABLE_PREFIX)Release
endif

ifeq ($(WARNINGS_AS_ERRORS), 1)
C_COMPILER_FLAGS += -Werror
endif

C_COMPILER_CALL = $(C_COMPILER) $(C_COMPILER_FLAGS)

INCLUDE_DIR = include
SOURCE_DIR = src
BUILD_DIR = build

C_SRCS = $(wildcard $(SOURCE_DIR)/*.c)
C_OBJECTS = $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(C_SRCS))

build: $(BUILD_DIR)/$(EXECUTABLE_NAME)

$(BUILD_DIR)/$(EXECUTABLE_NAME): $(C_OBJECTS)
	$(C_COMPILER_CALL) $^ -o $@

execute:
	./$(BUILD_DIR)/$(EXECUTABLE_NAME)

Wadi.T's avatar
Wadi.T committed
clean:
T.Wadi's avatar
T.Wadi committed
	rm $(BUILD_DIR)/*.o
	##rm $(BUILD_DIR)/*.exe

$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.c
	$(C_COMPILER_CALL) -I $(INCLUDE_DIR) -c $< -o $@

.PHONY: clean build