Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
91 lines (73 loc) · 2.59 KB
/
Copy pathMakefile
File metadata and controls
91 lines (73 loc) · 2.59 KB
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
# Directory that contains this project
PROJECT_DIR = incinii
PROJECT = project
GTEST = test_$(PROJECT)
# Compilation command and flags
CXX=g++
CXXVERSION= -std=c++11
CXXFLAGS= $(CXXVERSION) -g -fprofile-arcs -ftest-coverage
LINKFLAGS= -lgtest
# Directories
SRC_DIR = src
PROJECT_SRC_DIR = src/project
GTEST_DIR = test
SRC_INCLUDE = include
INCLUDE = -I ${SRC_INCLUDE}
# Tool varialbes
GCOV = gcov
LCOV = lcov
COVERAGE_RESULTS = results.coverage
COVERAGE_DIR = coverage
STATIC_ANALYSIS = cppcheck
STYLE_CHECK = cpplint.py
DOXY_DIR = docs/code
# Default goal, used by Atom for local compilation
.DEFAULT_GOAL := compileProject
# default rule for compiling .cc to .o
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
# clean up all files that should NOT be submitted
.PHONY: clean
clean:
rm -rf *~ $(SRC)/*.o $(GTEST_DIR)/output/*.dat \
*.gcov *.gcda *.gcno *.orig ???*/*.orig \
$(PROJECT) $(COVERAGE_RESULTS) \
$(GTEST) $(MEMCHECK_RESULTS) $(COVERAGE_DIR) \
$(DOXY_DIR)/html obj bin $(PROJECT).exe $(GTEST).exe
# compilation using the files in include, src, and test, but not src/project
$(GTEST): $(GTEST_DIR) $(SRC_DIR)
$(CXX) $(CXXFLAGS) -o $(GTEST) $(INCLUDE) \
$(GTEST_DIR)/*.cpp $(SRC_DIR)/*.cpp $(LINKFLAGS)
# compilation using the files in include, src, and src/project, but not test
compileProject: $(SRC_DIR) $(PROJECT_SRC_DIR)
$(CXX) $(CXXVERSION) -o $(PROJECT) $(INCLUDE) \
$(SRC_DIR)/*.cpp $(PROJECT_SRC_DIR)/*.cpp
# To perform all tests
.PHONY: allTests
allTests: $(GTEST) memcheck coverage docs static style
.PHONY: memcheck
memcheck: $(GTEST)
valgrind --tool=memcheck --leak-check=yes --error-exitcode=1 $(GTEST)
.PHONY: fullmemcheck
fullmemcheck: $(GTEST)
valgrind --tool=memcheck --leak-check=full --error-exitcode=1 $(GTEST)
.PHONY: coverage
coverage: $(GTEST)
$(GTEST)
# Determine code coverage
$(LCOV) --capture --gcov-tool $(GCOV) --directory . --output-file $(COVERAGE_RESULTS) --rc lcov_branch_coverage-1
# Only show code coverage for the source code files (not library files)
$(LCOV) --extract $(COVERAGE_RESULTS) */$(PROJECT_DIR)/$(SRC_DIR)/* -o $(COVERAGE_RESULTS)
#Generate the HTML reports
genhtml $(COVERAGE_RESULTS) --output-directory $(COVERAGE_DIR)
#Remove all of the generated files from gcov
rm -f *.gcda *.gcno
.PHONY: static
static: ${SRC_DIR} ${GTEST_DIR}
${STATIC_ANALYSIS} --verbose --enable=all ${SRC_DIR} ${GTEST_DIR} ${SRC_INCLUDE} --suppress=missingInclude
.PHONY: style
style: ${SRC_DIR} ${GTEST_DIR} ${SRC_INCLUDE} ${PROJECT_SRC_DIR}
${STYLE_CHECK} ${SRC_DIR}/* ${GTEST_DIR}/* ${SRC_INCLUDE}/* ${PROJECT_SRC_DIR}/*
.PHONY: docs
docs: ${SRC_INCLUDE}
doxygen $(DOXY_DIR)/doxyfile