Skip to content

Instantly share code, notes, and snippets.

@thiago-rezende
Last active February 24, 2024 12:05
Show Gist options
  • Save thiago-rezende/61ef31cec60b7fd0be1ccb370582cad6 to your computer and use it in GitHub Desktop.
Save thiago-rezende/61ef31cec60b7fd0be1ccb370582cad6 to your computer and use it in GitHub Desktop.
Sample Makefile
CC = clang
DEBUGGER = lldb
BUILD_DIR = build
BIN_DIR = $(BUILD_DIR)/bin
OBJ_DIR = $(BUILD_DIR)/obj
LIBS_CFLAGS = $(shell pkg-config --cflags uuid)
LIBS_LDFLAGS = $(shell pkg-config --libs uuid)
PROJECT_CFLAGS = -std=c99 -march=native -Iinclude
PROJECT_WANING_CFLAGS = -Wall -Wextra -pedantic
PROJECT_GENERAL_CFLAGS = -flto -glldb
PROJECT_DEFINITIONS_CFLAGS = -DDEBUG
PROJECT_OPTIMIZATION_CFLAGS = -O0
PROJECT_LDFLAGS = -fuse-ld=lld -fsanitize=leak
CFLAGS = $(PROJECT_CFLAGS) \
$(PROJECT_WANING_CFLAGS) \
$(PROJECT_GENERAL_CFLAGS) \
$(PROJECT_DEFINITIONS_CFLAGS) \
$(PROJECT_OPTIMIZATION_CFLAGS) \
$(LIBS_CFLAGS)
LDFLAGS = $(PROJECT_LDFLAGS) \
$(LIBS_LDFLAGS)
TARGET = application
SRC = $(wildcard src/*.c)
OBJ = $(SRC:src/%.c=$(OBJ_DIR)/%.o)
.PHONY: clean run debug install uninstall
all: $(BIN_DIR)/$(TARGET)
$(BIN_DIR)/$(TARGET): $(OBJ)
@mkdir -p $(BIN_DIR)
@echo "[ linking ] $@"
@$(CC) $(LDFLAGS) -o $@ $^
$(OBJ): $(OBJ_DIR)/%.o : src/%.c
@mkdir -p $(OBJ_DIR)
@echo "[ compiling ] $< --> $@"
@$(CC) $(CFLAGS) -c $< -o $@
clean:
@echo "[ cleaning ] $(BUILD_DIR)"
@rm -rf $(BUILD_DIR)
run: $(BIN_DIR)/$(TARGET)
@echo "[ running ] $(BIN_DIR)/$(TARGET)"
@exec $(BIN_DIR)/$(TARGET)
debug: $(BIN_DIR)/$(TARGET)
@echo "[ debugging ] $(BIN_DIR)/$(TARGET)"
@exec $(DEBUGGER) $(BIN_DIR)/$(TARGET)
install: $(BIN_DIR)/$(TARGET)
@echo "[ installing ] $(BIN_DIR)/$(TARGET) --> $(DESTDIR)$(PREFIX)/bin/$(TARGET)"
@install -d $(DESTDIR)$(PREFIX)/bin/
@install -m 755 $(BIN_DIR)/$(TARGET) $(DESTDIR)$(PREFIX)/bin/
uninstall: $(BIN_DIR)/$(TARGET)
@echo "[ uninstalling ] $(DESTDIR)$(PREFIX)/bin/$(TARGET)"
@rm -rf $(DESTDIR)$(PREFIX)/bin/$(TARGET)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment