1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| HIDE = @
NAME = Test
BINEXT = .so
SRCDIR = ./src/
OBJDIR = ./obj/
BINDIR = ./bin/
DEBUG = -D_DEBUG # DEBUG= : remove debug.c in compilation
ifeq ("$(DEBUG)","") # DEBUG=-D_DEBUG : add debug.c in compilation
EXCLUDE = $(SRCDIR)debug
MODE="NOT "
endif
CC = /usr/local/cross/gcc-3.3.4_glibc-2.3.2/arm-linux/bin/gcc
CFLAGS = -std=c99 -W -Wall -O2 -fPIC -pedantic -finline-functions -Os
LDFLAGS = -ldl -fvisibility=hidden -shared -lm
LINKER = -Wl,--version-script=$(NAME)_so.map
SRCS = $(filter-out $(EXCLUDE).c,$(wildcard $(SRCDIR)*.c))
SRCS_H = $(filter-out $(EXCLUDE).h,$(wildcard $(SRCDIR)*.h))
OBJS = $(addprefix $(OBJDIR),$(notdir $(SRCS:.c=.o)))
BIN = $(addprefix $(BINDIR), $(NAME)$(BINEXT))
DEPS = $(OBJS:.o=.d)
.PHONY: clean, install
all: pre-build main-build
pre-build:
$(HIDE)echo "==== DEBUG in source code is $(MODE)included ===="
main-build:
$(HIDE)echo "==== sources compilation beginning... ===="
$(HIDE)$(MAKE) --no-print-directory $(BIN)
$(BIN): $(OBJS)
$(HIDE)echo "==== linking ... ====="
$(HIDE)mkdir -p $(BINDIR)
$(HIDE)$(CC) $(LDFLAGS) $(OBJS) -o $(BIN) $(LINKER)
-include $(DEPS)
$(OBJDIR)%.o: $(SRCDIR)%.c $(SRCDIR)%.h
$(HIDE)mkdir -p $(OBJDIR)
$(HIDE)echo "---- generating dependency $(OBJDIR)$*.d"
# $(HIDE)$(CC) -MM -MF $(OBJDIR)$*.d -MT $(<F:.c=.o) -MT $(OBJDIR)$*.d $(CFLAGS) $<
$(HIDE)$(CC) $(CFLAGS) -MM -MF $(patsubst %.o,%.d,$@) -MT $(OBJDIR)$*.o $<
$(HIDE)echo "---- compilating object file $@"
$(HIDE)$(CC) $(CFLAGS) -c $< -o $@ $(DEBUG)
clean:
$(HIDE)$(RM) $(EXEC) $(OBJDIR)*.* $(DEPS) |
Partager