-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
56 lines (43 loc) · 1.5 KB
/
Makefile
File metadata and controls
56 lines (43 loc) · 1.5 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
# Default options.
ifndef CXX
CXX := g++
endif
CXXFLAGS := -std=c++14 -Wall -Wextra -O3 -fopenmp -g --coverage
SRC_DIR := src
OBJ_DIR := build
TEST_EXE := test.out
# Testsources and intermediate objects.
TESTS := $(shell find $(SRC_DIR) -name "*_test.cc")
HEADERS := $(shell find $(SRC_DIR) -name "*.h")
TEST_OBJS := $(TESTS:$(SRC_DIR)/%.cc=$(OBJ_DIR)/%.o)
# GTest related.
GTEST_DIR := gtest/googletest
GTEST_CXXFLAGS := $(CXXFLAGS) -isystem $(GTEST_DIR)/include -pthread
GTEST_HEADERS := $(GTEST_DIR)/include/gtest/*.h \
$(GTEST_DIR)/include/gtest/internal/*.h
GTEST_SRCS := $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h \
$(GTEST_HEADERS)
GTEST_MAIN := $(OBJ_DIR)/gtest_main.a
.PHONY: all test all_tests clean
all: test
test: $(TEST_EXE)
./$(TEST_EXE) --gtest_filter=-*LargeTest.*
all_tests: $(TEST_EXE)
./$(TEST_EXE)
clean:
rm -rf $(OBJ_DIR)
rm -f ./$(TEST_EXE)
# Tests.
$(TEST_EXE): $(TEST_OBJS) $(OBJS) $(GTEST_MAIN) $(HEADERS)
$(CXX) $(CXXFLAGS) $(TEST_OBJS) $(OBJS) $(GTEST_MAIN) \
-o $(TEST_EXE) $(LDLIBS) -lpthread
$(TEST_OBJS): $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc $(HEADERS)
mkdir -p $(@D) && $(CXX) $(GTEST_CXXFLAGS) -c $< -o $@
$(GTEST_MAIN): $(OBJ_DIR)/gtest-all.o $(OBJ_DIR)/gtest_main.o
$(AR) $(ARFLAGS) $@ $^
$(OBJ_DIR)/gtest-all.o: $(GTEST_SRCS)
mkdir -p $(@D) && $(CXX) -I$(GTEST_DIR) $(GTEST_CXXFLAGS) -c \
$(GTEST_DIR)/src/gtest-all.cc -o $@
$(OBJ_DIR)/gtest_main.o: $(GTEST_SRCS)
mkdir -p $(@D) && $(CXX) -I$(GTEST_DIR) $(GTEST_CXXFLAGS) -c \
$(GTEST_DIR)/src/gtest_main.cc -o $@