|
|
- ##
- ## 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)
-
- PWD = $(shell pwd)
- EXEC ?= $(notdir $(PWD))
-
- CSRCS = $(wildcard $(PWD)/*.cc)
- DSRCS = $(foreach dir, $(DEPDIR), $(filter-out $(MROOT)/$(dir)/Main.cc, $(wildcard $(MROOT)/$(dir)/*.cc)))
- CHDRS = $(wildcard $(PWD)/*.h)
- COBJS = $(CSRCS:.cc=.o) $(DSRCS:.cc=.o)
-
- PCOBJS = $(addsuffix p, $(COBJS))
- DCOBJS = $(addsuffix d, $(COBJS))
- RCOBJS = $(addsuffix r, $(COBJS))
-
-
- CXX ?= g++
- CFLAGS ?= -Wall -Wno-parentheses
- LFLAGS ?= -Wall
-
- COPTIMIZE ?= -O3
-
- CFLAGS += -I$(MROOT) -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS
- LFLAGS += -lz
-
- .PHONY : s p d r rs clean
-
- s: $(EXEC)
- p: $(EXEC)_profile
- d: $(EXEC)_debug
- r: $(EXEC)_release
- rs: $(EXEC)_static
-
- libs: lib$(LIB)_standard.a
- libp: lib$(LIB)_profile.a
- libd: lib$(LIB)_debug.a
- libr: lib$(LIB)_release.a
-
- ## Compile options
- %.o: CFLAGS +=$(COPTIMIZE) -g -D DEBUG
- %.op: CFLAGS +=$(COPTIMIZE) -pg -g -D NDEBUG
- %.od: CFLAGS +=-O0 -g -D DEBUG
- %.or: CFLAGS +=$(COPTIMIZE) -g -D NDEBUG
-
- ## Link options
- $(EXEC): LFLAGS += -g
- $(EXEC)_profile: LFLAGS += -g -pg
- $(EXEC)_debug: LFLAGS += -g
- #$(EXEC)_release: LFLAGS += ...
- $(EXEC)_static: LFLAGS += --static
-
- ## Dependencies
- $(EXEC): $(COBJS)
- $(EXEC)_profile: $(PCOBJS)
- $(EXEC)_debug: $(DCOBJS)
- $(EXEC)_release: $(RCOBJS)
- $(EXEC)_static: $(RCOBJS)
-
- lib$(LIB)_standard.a: $(filter-out */Main.o, $(COBJS))
- lib$(LIB)_profile.a: $(filter-out */Main.op, $(PCOBJS))
- lib$(LIB)_debug.a: $(filter-out */Main.od, $(DCOBJS))
- lib$(LIB)_release.a: $(filter-out */Main.or, $(RCOBJS))
-
-
- ## Build rule
- %.o %.op %.od %.or: %.cc
- @echo Compiling: $(subst $(MROOT)/,,$@)
- @$(CXX) $(CFLAGS) -c -o $@ $<
-
- ## Linking rules (standard/profile/debug/release)
- $(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static:
- @echo Linking: "$@ ( $(foreach f,$^,$(subst $(MROOT)/,,$f)) )"
- @$(CXX) $^ $(LFLAGS) -o $@
-
- ## Library rules (standard/profile/debug/release)
- lib$(LIB)_standard.a lib$(LIB)_profile.a lib$(LIB)_release.a lib$(LIB)_debug.a:
- @echo Making library: "$@ ( $(foreach f,$^,$(subst $(MROOT)/,,$f)) )"
- @$(AR) -rcsv $@ $^
-
- ## Library Soft Link rule:
- libs libp libd libr:
- @echo "Making Soft Link: $^ -> lib$(LIB).a"
- @ln -sf $^ lib$(LIB).a
-
- ## Clean rule
- clean:
- @rm -f $(EXEC) $(EXEC)_profile $(EXEC)_debug $(EXEC)_release $(EXEC)_static \
- $(COBJS) $(PCOBJS) $(DCOBJS) $(RCOBJS) *.core depend.mk
-
- ## Make dependencies
- depend.mk: $(CSRCS) $(CHDRS)
- @echo Making dependencies
- @$(CXX) $(CFLAGS) -I$(MROOT) \
- $(CSRCS) -MM | sed 's|\(.*\):|$(PWD)/\1 $(PWD)/\1r $(PWD)/\1d $(PWD)/\1p:|' > depend.mk
- @for dir in $(DEPDIR); do \
- if [ -r $(MROOT)/$${dir}/depend.mk ]; then \
- echo Depends on: $${dir}; \
- cat $(MROOT)/$${dir}/depend.mk >> depend.mk; \
- fi; \
- done
-
- -include $(MROOT)/mtl/config.mk
- -include depend.mk
|