71 lines
1.3 KiB
Makefile
71 lines
1.3 KiB
Makefile
CC = gcc
|
|
SRC = source
|
|
OBJ = objects
|
|
LIB = libraries
|
|
SRC_LIB = $(SRC)/libraries
|
|
INC = includes
|
|
BIN = bin
|
|
TARGET = root
|
|
PREFIX ?= /usr/local
|
|
CFLAGS = -Wall -Wextra -std=c11
|
|
LIBRARIES =
|
|
INCLUDES = \
|
|
-I ./source
|
|
|
|
DEPENDENCIES = $(shell find ./deps -maxdepth 2 -name Makefile -printf '%h\n' | grep -v 'unittest' | grep -v '^.$$')
|
|
SOURCES = $(shell find ./source -name '*.c')
|
|
|
|
# Debug
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -DDEBUG=1 -ggdb
|
|
endif
|
|
|
|
# Release
|
|
ifeq ($(RELEASE), 1)
|
|
CFLAGS += -O2
|
|
endif
|
|
|
|
# Shared
|
|
ifeq ($(SHARED), 1)
|
|
SOURCES=$(shell find ./$(SRC_LIB) -name '*.c')
|
|
TARGET=my_lib
|
|
endif
|
|
|
|
OBJECTS = $(addprefix $(OBJ)/,$(SOURCES:%.c=%.o))
|
|
|
|
.PHONY: all
|
|
all: dependencies source
|
|
|
|
.PHONY: dependencies
|
|
dependencies:
|
|
echo "empty"
|
|
|
|
.PHONY: source
|
|
source: $(OBJECTS)
|
|
@mkdir -p $(BIN)
|
|
ifeq ($(SHARED), 1)
|
|
$(CC) -shared -fPIC -o $(BIN)/$(TARGET).so $^ $(LIBRARIES)
|
|
ar -rcs $(BIN)/$(TARGET).a $^
|
|
else
|
|
$(CC) $(CFLAGS) $(LIBRARIES) $^ -o $(BIN)/$(TARGET)
|
|
endif
|
|
# $(CC) -o $(TARGET) $(OBJECTS) $(CFLAGS)
|
|
|
|
$(OBJ)/%.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) -c -o $@ $< $(CFLAGS) $(INCLUDES)
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@rm -rf $(OBJ)/* 2> /dev/null
|
|
@rm -rf $(BIN)/* 2> /dev/null
|
|
@rm -rf $(INC)/* 2> /dev/null
|
|
|
|
# .PHONY: install
|
|
# install:
|
|
# install $(TARGET) $(PREFIX)/bin
|
|
|
|
# .PHONY: uninstall
|
|
# uninstall:
|
|
# @rm -f $(PREFIX)/bin/$(TARGET) 2> /dev/null
|