TP 11 exo1: permit to specify linker libs to all relevant target in the
[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
bfccd592 23all: $(LIBRARY_NAME).a $(LIBRARY_NAME).so $(BINARY_NAME)
824b6c41
JB
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
bfccd592
JB
44#FIXME: Add a way to better control the library build
45CFLAGS := -fPIC $(CFLAGS) $(WARN_FLAGS) $(STD_FLAG) $(OPTI_FLAG) $(DEBUG_FLAG)
824b6c41
JB
46LDFLAGS := $(LDFLAGS) $(STRIP_FLAG)
47LIBLDFLAGS := -shared $(LDFLAGS)
48
49OBJDIR := $(BUILDDIR)/objs
50$(shell mkdir -p $(OBJDIR))
51
52SRCS=$(wildcard *.c)
53OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))
54OBJSLIB=$(addprefix $(OBJDIR)/,$(LIBOBJS))
55
56DEPDIR := $(BUILDDIR)/deps
57$(shell mkdir -p $(DEPDIR))
58DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td
59POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d
60
bfccd592
JB
61$(LIBRARY_NAME).a: $(OBJSLIB)
62 @echo "[AR StO] $@"
63 @$(AR) rcs $@ $^
824b6c41 64
bfccd592 65$(LIBRARY_NAME).so: $(OBJSLIB)
824b6c41 66 @echo "[LD ShO] $@"
bd257190 67 @$(LD) $(CFLAGS) $(LIBLDFLAGS) $^ $(LDLIBS) -o $@
824b6c41 68
bfccd592
JB
69$(BINARY_NAME): $(OBJS)
70 @echo "[LD ] $@"
71 @$(LD) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
824b6c41
JB
72
73$(OBJDIR)/%.o: %.c $(DEPDIR)/%.d
74 @echo "[C ] $*"
75 @$(CC) $(DEPFLAGS) $(CFLAGS) -c $< -o $@
76 @$(POSTCOMPILE)
77
78$(DEPDIR)/%.d: ;
79
80.PRECIOUS: $(DEPDIR)/%.d
81
82include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS))))
83
84clean:
85 @echo "[CLN]"
86 -@rm -r $(BUILDDIR)
87 -@rm $(BINARY_NAME)
88 -@rm $(LIBRARY_NAME).so
89 -@rm $(LIBRARY_NAME).a
90
91disassemble: $(BINARY_NAME)
92 objdump -d $< | less
93
94symbols: $(BINARY_NAME)
95 objdump -t $< | sort | less