This repository was archived by the owner on Sep 14, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
114 lines (93 loc) · 3.39 KB
/
Makefile
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
# meant for UNIX systems only
CXX = g++
LDPATH = /usr/local/lib/
#LDPATH = /usr/lib64/
# file extensions
BINEXT = out
OBJEXT = o
DEPEXT = d
SRCEXT = cpp
STLIBEXT = a
DYNLIBEXT = so
# project dirs
SRCDIR = src
OBJDIR = obj
BINDIR = bin
RESDIR = res
DEPDIR = dep
DELDIR = $(OBJDIR) $(BINDIR) $(DEPDIR)
# colored output
BOLD = $(shell tput bold)
RED = $(shell tput setaf 1)
GREEN = $(shell tput setaf 2)
RESET = $(shell tput sgr0)
OK = $(BOLD)$(GREEN)[OK]$(RESET)
FAIL = $(BOLD)$(RED)[FAIL]$(RESET)
DEP_MSG = echo -n "$(BOLD)Creating dependency for $(patsubst $(SRCDIR)/%.$(SRCEXT),$(OBJDIR)/%.$(OBJEXT),$(1)) ... $(RESET)"
COMP_MSG = echo -n "$(BOLD)Compiling $(1) ... $(RESET)"
LD_MSG = echo -n "$(BOLD)Linking $(1) ... $(RESET)"
FAIL_MSG = echo "$(1)" | GREP_COLOR='01;31' egrep --color=always -E '^|error' | GREP_COLOR='00;38;5;226' egrep --color=always -E '^|warning'
# create folder if it doesn't exist
DIR = \
if [ ! -d "$(1)" ]; then \
echo -n "$(BOLD)Creating directory $(1)/ ... ";\
mkdir $(1);\
echo "$(OK)";\
fi
# compilation flags
INCLUDE =
LDFLAGS = `root-config --libs --ldflags`
BOOSTFLAGS = $(LDPATH)libboost_program_options.$(DYNLIBEXT)
LDFLAGS += $(BOOSTFLAGS)
CXXFLAGS = `root-config --cflags`
CXXFLAGS += -g -O3 -Wall -Wextra
# project files
SRCS = Jet JetCollection
OBJS = $(SRCS:%=$(OBJDIR)/%.$(OBJEXT))
TARGET = process histoplot efficiency copytree sample test nevents consistency selection stackem cumulative
TARGET += genrand cumulplot gsample combinations analyze btagcounter cumultest normcheck plotntest
# makefile rules
all: $(TARGET:%=$(BINDIR)/%.$(BINEXT))
# target binary
$(TARGET:%=$(BINDIR)/%.$(BINEXT)): $(BINDIR)/%.$(BINEXT): $(OBJDIR)/%.$(OBJEXT) $(OBJS)
@$(call DIR,$(BINDIR))
@$(call LD_MSG,$<)
@_ERROR=$$($(CXX) $^ $(CXXFLAGS) $(LDFLAGS) -o $@ 2>&1); \
if [ $$? -eq 0 ]; then echo "$(OK)"; \
else $(call FAIL_MSG,$(FAIL)\n$$_ERROR); exit 1; fi
# target object files
$(patsubst %,$(OBJDIR)/%.$(OBJEXT),$(TARGET)): $(OBJDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
@$(call DIR,$(OBJDIR))
@$(call COMP_MSG,$<)
@_ERROR=$$($(CXX) -c $(INCLUDE) $(CXXFLAGS) $< -o $@ 2>&1); \
if [ $$? -eq 0 ]; then echo "$(OK)"; \
else $(call FAIL_MSG,$(FAIL)\n$$_ERROR); exit 1; fi
# other object files
$(OBJS): $(OBJDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
@$(call DIR,$(OBJDIR))
@$(call COMP_MSG,$<)
@_ERROR=$$($(CXX) -c $(INCLUDE) $(CXXFLAGS) $< -o $@ 2>&1); \
if [ $$? -eq 0 ]; then echo "$(OK)"; \
else $(call FAIL_MSG,$(FAIL)\n$$_ERROR); exit 1; fi
# dependency files
$(DEPDIR)/%.$(DEPEXT): $(SRCDIR)/%.$(SRCEXT)
@$(call DIR,$(DEPDIR))
@$(call DEP_MSG,$<)
@_ERROR=$$($(CXX) $(CXXFLAGS) -MM -MT '$(patsubst $(SRCDIR)/%.$(SRCEXT),$(OBJDIR)/%.$(OBJEXT),$<)' $< -MF $@ 2>&1); \
if [ $$? -eq 0 ]; then echo "$(OK)"; \
else $(call FAIL_MSG,$(FAIL)\n$$_ERROR); exit 1; fi
# dependency files into separate dir
DEPS = $(TARGET:%=$(DEPDIR)/%.$(DEPEXT))
DEPS += $(SRCS:%=$(DEPDIR)/%.$(DEPEXT))
CLEAN = clean
DOCS = docs
NODEPS = $(CLEAN) $(DOCS)
ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
-include $(DEPS)
endif
.PHONY: clean
$(CLEAN):
@$(foreach var,$(DELDIR), echo -n "$(BOLD)Removing $(var)/ ... "\
&& rm -rf $(var) && echo "$(OK)";)
#$(DOCS):
# doxygen Doxyfile