blob: 15f023fb389d01cf426a0b07d0e91aa5282f3972 (
plain)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
##
## Template makefile for Standard, Profile, Debug, Release, and Release-static versions
##
## eg: "make rs" for a statically linked release version.
## "make d" for a debug version (no optimizations).
## "make" for the standard version (optimized, but with debug information and assertions active)
CSRCS ?= $(wildcard *.C)
CHDRS ?= $(wildcard *.h)
COBJS ?= $(addsuffix .o, $(basename $(CSRCS)))
PCOBJS = $(addsuffix p, $(COBJS))
DCOBJS = $(addsuffix d, $(COBJS))
RCOBJS = $(addsuffix r, $(COBJS))
EXEC ?= $(notdir $(shell pwd))
LIB ?= $(EXEC)
CXX ?= g++
CFLAGS ?= -Wall
LFLAGS ?= -Wall
COPTIMIZE ?= -O3
.PHONY : s p d r rs lib libd clean
s: $(EXEC)
p: $(EXEC)_profile
d: $(EXEC)_debug
r: $(EXEC)_release
rs: $(EXEC)_static
lib: lib$(LIB).a
libd: lib$(LIB)d.a
## Compile options
%.o: CFLAGS +=$(COPTIMIZE) -ggdb -D DEBUG
%.op: CFLAGS +=$(COPTIMIZE) -pg -ggdb -D NDEBUG
%.od: CFLAGS +=-O0 -ggdb -D DEBUG # -D INVARIANTS
%.or: CFLAGS +=$(COPTIMIZE) -D NDEBUG
## Link options
$(EXEC): LFLAGS := -ggdb $(LFLAGS)
$(EXEC)_profile: LFLAGS := -ggdb -pg $(LFLAGS)
$(EXEC)_debug: LFLAGS := -ggdb $(LFLAGS)
$(EXEC)_release: LFLAGS := $(LFLAGS)
$(EXEC)_static: LFLAGS := --static $(LFLAGS)
## Dependencies
$(EXEC): $(COBJS)
$(EXEC)_profile: $(PCOBJS)
$(EXEC)_debug: $(DCOBJS)
$(EXEC)_release: $(RCOBJS)
$(EXEC)_static: $(RCOBJS)
lib$(LIB).a: $(filter-out Main.or, $(RCOBJS))
lib$(LIB)d.a: $(filter-out Main.od, $(DCOBJS))
## Build rule
%.o %.op %.od %.or: %.C
@echo Compiling: "$@ ( $< )"
@$(CXX) $(CFLAGS) -c -o $@ $<
## Linking rules (standard/profile/debug/release)
$(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static:
@echo Linking: "$@ ( $^ )"
@$(CXX) $^ $(LFLAGS) -o $@
## Library rule
lib$(LIB).a lib$(LIB)d.a:
@echo Library: "$@ ( $^ )"
@rm -f $@
@ar cq $@ $^
## Clean rule
clean:
@rm -f $(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static \
$(COBJS) $(PCOBJS) $(DCOBJS) $(RCOBJS) *.core depend.mak lib$(LIB).a lib$(LIB)d.a
## Make dependencies
depend.mk: $(CSRCS) $(CHDRS)
@echo Making dependencies ...
@$(CXX) $(CFLAGS) -MM $(CSRCS) > depend.mk
@cp depend.mk /tmp/depend.mk.tmp
@sed "s/o:/op:/" /tmp/depend.mk.tmp >> depend.mk
@sed "s/o:/od:/" /tmp/depend.mk.tmp >> depend.mk
@sed "s/o:/or:/" /tmp/depend.mk.tmp >> depend.mk
@rm /tmp/depend.mk.tmp
-include depend.mk
|