Skip to content

Instantly share code, notes, and snippets.

@Samdal
Last active August 16, 2023 06:09
Show Gist options
  • Save Samdal/a5f328ff53653da3fb7e87c92a5b9ff4 to your computer and use it in GitHub Desktop.
Save Samdal/a5f328ff53653da3fb7e87c92a5b9ff4 to your computer and use it in GitHub Desktop.
General purpose Makefile for C projects
# General purpose Makefile for C projects
# options
CC = gcc
DEBUGGER = gdb
LINKER = $(CC)
CFLAGS = -std=c99 -O0 -pthread
LFLAGS = -ldl -lm -lpthread
# directories
TARGET = app
SRC_DIR = src
BIN_DIR = bin
OBJ_DIR = $(BIN_DIR)/.obj
SRC = $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/*/*.c)
OBJ = $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
build: $(BIN_DIR) $(BIN_DIR)/$(TARGET)
$(BIN_DIR):
mkdir -p $@
# compile
$(OBJ): $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
@mkdir -p $(@D)
$(CC) -c $(CFLAGS) $< -o $@
# link
$(BIN_DIR)/$(TARGET): $(OBJ)
$(LINKER) $(OBJ) $(LFLAGS) -o $@
run: build
./$(BIN_DIR)/$(TARGET)
debug: build
$(DEBUGGER) $(BIN_DIR)/$(TARGET)
clean:
rm -f $(OBJ)
remove: clean
rm -f $(BIN_DIR)/$(TARGET)
.PHONY: build run debug clean remove
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment