File: Makefile.common

package info (click to toggle)
libstatgen 1.0.15-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,588 kB
  • sloc: cpp: 49,624; ansic: 1,408; makefile: 320; sh: 60
file content (145 lines) | stat: -rw-r--r-- 4,397 bytes parent folder | download | duplicates (4)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# This makefile is common for both Makefile.lib and Makefile.src
TOOLBASE ?= 
COMPILE_ANY_CHANGE ?= 
SRCONLY ?= 
HDRONLY ?= 
USER_REMOVES ?=
# USER_REMOVES are additional things that should be removed by clean.

MAKEFILES_PATH := $(dir $(lastword $(MAKEFILE_LIST)))
include $(MAKEFILES_PATH)Makefile.include

MAKE_DEPENDS=Makefile.depends

# Source File Set
TOOLHDR = $(TOOLBASE:=.h) $(HDRONLY)
TOOLSRC = $(TOOLBASE:=.cpp) $(SRCONLY)
TOOLOBJ = $(patsubst %.f,%.o,$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(TOOLSRC))))

# Define the directory structure for opt/debug/profile for objs & bins
SUBDIR_OPT ?= 
SUBDIR_DEBUG ?= /debug
SUBDIR_PROFILE ?= /profile

#Objs default to the obj directory.
OBJDIR ?= ../obj
OBJDIR_OPT ?= $(OBJDIR)$(SUBDIR_OPT)
OBJDIR_DEBUG ?= $(OBJDIR)$(SUBDIR_DEBUG)
OBJDIR_PROFILE ?= $(OBJDIR)$(SUBDIR_PROFILE)

#Needed for cleaning up the library - need all three.
OBJECTS_OPT := $(patsubst %,$(OBJDIR_OPT)/%,$(TOOLOBJ))
OBJECTS_DEBUG := $(patsubst %,$(OBJDIR_DEBUG)/%,$(TOOLOBJ))
OBJECTS_PROFILE := $(patsubst %,$(OBJDIR_PROFILE)/%,$(TOOLOBJ))

# Tests go in the test directory.
TESTDIR ?= test

ALWAYS_COMP_OBJ_OPT = $(patsubst %,$(OBJDIR_OPT)/%,$(COMPILE_ANY_CHANGE:=.o))
ALWAYS_COMP_OBJ_DEBUG = $(patsubst %,$(OBJDIR_DEBUG)/%,$(COMPILE_ANY_CHANGE:=.o))
ALWAYS_COMP_OBJ_PROFILE = $(patsubst %,$(OBJDIR_PROFILE)/%,$(COMPILE_ANY_CHANGE:=.o))

CCOMPILE=$(CC) $(COMPFLAGS) -o $@ -c $*.c 
CXXCOMPILE=$(CXX) $(COMPFLAGS) -o $@ -c $*.cpp -DVERSION="\"$(VERSION)\""

.PHONY: all test clean opt debug profile specific_clean

# all, build as opt, debug, and profile.
all: opt debug profile

opt: OPTFLAG=$(OPTFLAG_OPT)
debug: OPTFLAG=$(OPTFLAG_DEBUG)
profile: OPTFLAG=$(OPTFLAG_PROFILE)

#########
# Help
include $(MAKEFILES_PATH)Makefile.help

#######
# Objects
# The objects are dependent on the object directory.
$(OBJECTS_OPT): | $(OBJDIR_OPT)
$(OBJECTS_DEBUG): | $(OBJDIR_DEBUG)
$(OBJECTS_PROFILE): | $(OBJDIR_PROFILE)

# Create the object directory
$(OBJDIR_OPT) $(OBJDIR_DEBUG) $(OBJDIR_PROFILE):
	mkdir -p $@

# Compile the source 
# Must keep the 3 types (opt, debug, profile) separate,
# otherwise on a "make all" makefile will think it has already compiled the
# target.
$(OBJDIR_OPT)/%.o: %.c
	$(CCOMPILE)
$(OBJDIR_DEBUG)/%.o: %.c
	$(CCOMPILE)
$(OBJDIR_PROFILE)/%.o: %.c
	$(CCOMPILE)

$(OBJDIR_OPT)/%.o: %.cpp 
	$(CXXCOMPILE)
$(OBJDIR_DEBUG)/%.o: %.cpp 
	$(CXXCOMPILE)
$(OBJDIR_PROFILE)/%.o: %.cpp 
	$(CXXCOMPILE)

ifneq ($(COMPILE_ANY_CHANGE),)
$(ALWAYS_COMP_OBJ_OPT):  $(COMPILE_ANY_CHANGE:=.cpp)  $(filter-out $(ALWAYS_COMP_OBJ_OPT),$(OBJECTS_OPT))
	$(CXX) $(COMPFLAGS) -o $@ -c  $(*F).cpp -DVERSION="\"$(VERSION)\""
$(ALWAYS_COMP_OBJ_DEBUG):  $(COMPILE_ANY_CHANGE:=.cpp)  $(filter-out $(ALWAYS_COMP_OBJ_DEBUG),$(OBJECTS_DEBUG))
	$(CXX) $(COMPFLAGS) -o $@ -c  $(*F).cpp -DVERSION="\"$(VERSION)\""
$(ALWAYS_COMP_OBJ_PROFILE):  $(COMPILE_ANY_CHANGE:=.cpp)  $(filter-out $(ALWAYS_COMP_OBJ_PROFILE),$(OBJECTS_PROFILE))
	$(CXX) $(COMPFLAGS) -o $@ -c  $(*F).cpp -DVERSION="\"$(VERSION)\""
endif

#########
# Test
test: all
	@if test -f $(TESTDIR)/Makefile; \
        then \
	$(MAKE) -C $(TESTDIR) --no-print-directory $@; \
        fi

#########
# clean
clean : specific_clean
	$(USER_REMOVES)
	-rm -f $(OBJDIR_OPT)/*.o $(OBJDIR_DEBUG)/*.o $(OBJDIR_PROFILE)/*.o *~ 
	@if test -f $(TESTDIR)/Makefile; \
        then \
	$(MAKE) -C $(TESTDIR) --no-print-directory $@; \
        fi

.SUFFIXES : .cpp .c .o .X.o $(SUFFIXES)

#
# The newest version of astyle will remove parens in a statement
# header (the character following if/while/do).  The current
# version in Ubuntu does not.
#
# See http://astyle.sourceforge.net/astyle.html#_Padding_Options
#
style:
	(command -v astyle || echo "astyle not installed.")
	(command -v astyle && astyle --style=ansi --preserve-date --unpad-paren --indent-switches *.cpp *.h)

###############
# Dependencies
DFLAGS=-Y $(COMPFLAGS)

cleandepend:
	        makedepend -- $(DFLAGS) --

depend:
	touch $(MAKE_DEPENDS)
	makedepend -f$(MAKE_DEPENDS) -p$$\(OBJDIR_OPT\)/ -- $(DFLAGS) -- $(TOOLSRC) >/dev/null 2>&1
	makedepend -f$(MAKE_DEPENDS) -a -p$$\(OBJDIR_DEBUG\)/ -- $(DFLAGS) -- $(TOOLSRC) >/dev/null 2>&1
	makedepend -f$(MAKE_DEPENDS) -a -p$$\(OBJDIR_PROFILE\)/ -- $(DFLAGS) -- $(TOOLSRC) >/dev/null 2>&1


ifeq ($(wildcard $(MAKE_DEPENDS)),)
$(OBJECTS_OPT) $(OBJECTS_DEBUG) $(OBJECTS_PROFILE) : $(TOOLHDR)
else
include $(MAKE_DEPENDS)
endif