TP 11 exo1: Add the tweaked Makefile to make the linked list a library
[TD_C.git] / TP_11 / exo1 / Makefile
CommitLineData
824b6c41
JB
1# Sample Makefile to build simple project.
2#
3# This Makefile expect all source files (.c) to be at the same level, in the
4# current working directory.
5#
6# It will automatically generate dependencies, compile all files, and produce a
7# binary using the provided name.
8#
9# Set BINARY_NAME to the name of the binary file to build.
10# Set BUILD_TYPE to either debug or release
11#
12# Automatic dependencies code from:
13# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/#tldr
14BINARY_NAME=exo1
15LIBOBJS=clist.o # object to put in the library
16LIBRARY_NAME=libtpC
17BUILD_TYPE=debug
18
19# ====================================
20# DO NOT CHANGE STUFF BEYOND THIS LINE
21# ====================================
22
23all: $(LIBRARY_NAME).a $(BINARY_NAME)
24
25CC=gcc
26LD=gcc
27AR=ar
28
29WARN_FLAGS = -Wall -Wextra
30STD_FLAG = -std=c11
31
32ifeq ($(BUILD_TYPE),debug)
33BUILDDIR := .build/debug
34DEBUG_FLAG = -g
35STRIP_FLAG =
36OPTI_FLAG = -O0
37else
38BUILDDIR := .build/release
39DEBUG_FLAG =
40STRIP_FLAG = -s
41OPTIFLAG = -O3
42endif
43
44CFLAGS := $(CFLAGS) $(WARN_FLAGS) $(STD_FLAG) $(OPTI_FLAG) $(DEBUG_FLAG)
45LDFLAGS := $(LDFLAGS) $(STRIP_FLAG)
46LIBLDFLAGS := -shared $(LDFLAGS)
47
48OBJDIR := $(BUILDDIR)/objs
49$(shell mkdir -p $(OBJDIR))
50
51SRCS=$(wildcard *.c)
52OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))
53OBJSLIB=$(addprefix $(OBJDIR)/,$(LIBOBJS))
54
55DEPDIR := $(BUILDDIR)/deps
56$(shell mkdir -p $(DEPDIR))
57DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td
58POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d
59
60$(BINARY_NAME): $(OBJS)
61 @echo "[LD ] $@"
62 @$(LD) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
63
64$(LIBRARY_NAME).so: $(OBJSLIB) $(BINARY_NAME)
65 @echo "[LD ShO] $@"
66 @$(LD) $(CFLAGS) $(LDLIBFLAGS) $^ $(LDLIBS) -o $@
67
68$(LIBRARY_NAME).a: $(OBJS)
69 @echo "[AR StO] $@"
70 @$(AR) rcs $@ $^
71
72$(OBJDIR)/%.o: %.c $(DEPDIR)/%.d
73 @echo "[C ] $*"
74 @$(CC) $(DEPFLAGS) $(CFLAGS) -c $< -o $@
75 @$(POSTCOMPILE)
76
77$(DEPDIR)/%.d: ;
78
79.PRECIOUS: $(DEPDIR)/%.d
80
81include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS))))
82
83clean:
84 @echo "[CLN]"
85 -@rm -r $(BUILDDIR)
86 -@rm $(BINARY_NAME)
87 -@rm $(LIBRARY_NAME).so
88 -@rm $(LIBRARY_NAME).a
89
90disassemble: $(BINARY_NAME)
91 objdump -d $< | less
92
93symbols: $(BINARY_NAME)
94 objdump -t $< | sort | less