Skip to content

Instantly share code, notes, and snippets.

@maciejjo
Last active November 8, 2017 10:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save maciejjo/4ee74f6603f4a4497093 to your computer and use it in GitHub Desktop.
Save maciejjo/4ee74f6603f4a4497093 to your computer and use it in GitHub Desktop.
Generic Makefile for a small C project
SRCDIR = src
HDRDIR = headers
OBJDIR = obj
BINDIR = bin
DEPDIR = dep
DATDIR = data
CC = gcc
TARGET = sorting
CFLAGS = -Wall -Wextra -pedantic -g -O0 -I$(HDRDIR)
LFLAGS =
SOURCES := $(wildcard $(SRCDIR)/*.c)
HEADERS := $(wildcard $(HDRDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
DEPS := $(OBJECTS:$(OBJDIR)/%.o=$(DEPDIR)/%.d)
REMOVE := rm -rf
# Linking
$(BINDIR)/$(TARGET): $(OBJECTS) $(CMN_OBJ)
mkdir -p $(BINDIR)
$(CC) $(LFLAGS) -o $@ $(OBJECTS) $(CMN_OBJ)
@echo "Linking complete"
-include $(DEPS)
# Compilation
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
mkdir -p $(OBJDIR)
mkdir -p $(DEPDIR)
$(CC) -c $(CFLAGS) $< -o $@
$(CC) -I$(HDRDIR) -MM -MT '$(OBJDIR)/$*.o' $(SRCDIR)/$*.c > $(DEPDIR)/$*.d
@echo "Compiled $<"
# Generate file list for cscope
cscope.files: $(SOURCES) $(HEADERS)
echo $(SOURCES) $(HEADERS) > cscope.files
# Generate cscope database
cscope.out: cscope.files
cscope -q -R -b -i cscope.files
.PHONY: clean
clean:
$(REMOVE) $(OBJECTS) $(OBJDIR) $(BINDIR) $(DEPDIR)
@echo "Deleted $<"
.PHONY: remove
remove:
$(REMOVE) $(BINDIR)/$(TARGET)
$(REMOVE) $(OBJECTS)
$(REMOVE) $(DEPS)
$(REMOVE) cscope.*
@echo "Deleted $<"
.PHONY: cscope
cscope: cscope.out
.PHONY: all
all: $(BINDIR)/$(TARGET)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment