-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
58 lines (46 loc) · 1.63 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
CC = gcc
CXX = g++
AR = ar
BUILD_DIR = ./build/
BUILD_OBJ_DIR = $(BUILD_DIR)obj/
BUILD_MAP_DIR = $(BUILD_DIR)map/
BUILD_LIB_DIR = $(BUILD_DIR)lib/
BUILD_BIN_DIR = $(BUILD_DIR)bin/
INC_DIR = ./src/
SRC_DIR = ./src/
TEST_DIR = ./tests/
C_FLAGS = -std=c++11 -fPIC -I$(INC_DIR)
LD_FLAGS = -fPIC -shared
LIB_SOURCES := $(wildcard $(SRC_DIR)*.cpp)
LIB_BASENAME = modbus_tcp
LIB_NAME = lib$(LIB_BASENAME).a
TEST_SOURCES := $(wildcard $(TEST_DIR)*.cpp)
LIB_OBJS = $(addprefix $(BUILD_OBJ_DIR), $(addsuffix .o, $(basename $(LIB_SOURCES))))
TEST_OBJS = $(addprefix $(BUILD_OBJ_DIR), $(addsuffix .o, $(basename $(TEST_SOURCES))))
all: $(LIB_BASENAME) test
$(LIB_BASENAME): $(LIB_OBJS)
mkdir -p $(BUILD_LIB_DIR)
mkdir -p $(BUILD_OBJ_DIR)
mkdir -p $(BUILD_MAP_DIR)
$(AR) -r $(BUILD_LIB_DIR)/$(LIB_NAME) $^
# $(CXX) -o $(C_FLAGS) -s -fopenmp $^ -o $(BUILD_LIB_DIR)/$(LIB_NAME) $(LD_FLAGS) -Wl,-Map,$(BUILD_MAP_DIR)[email protected]
test: $(TEST_OBJS)
mkdir -p $(BUILD_BIN_DIR)
mkdir -p $(BUILD_OBJ_DIR)
mkdir -p $(BUILD_MAP_DIR)
for file in $(TEST_SOURCES); do \
make test-`echo $$file | awk -F'/' '{print $$NF}' | awk -F'.cpp' '{print $$1}'`; \
done
test-%:
mkdir -p $(BUILD_BIN_DIR)
mkdir -p $(BUILD_OBJ_DIR)
mkdir -p $(BUILD_MAP_DIR)
$(CXX) -o $(C_FLAGS) -s -fopenmp $(addprefix $(BUILD_OBJ_DIR)tests/, $(subst test-, , $@)).o -o $(addprefix $(BUILD_BIN_DIR), $(subst test-, , $@)) -L$(BUILD_LIB_DIR) -l$(LIB_BASENAME) -Wl,-Map,$(addprefix $(BUILD_MAP_DIR), $(subst test-, , $@)).map
# $(BUILD_OBJ_DIR)%.o: %.c
# mkdir -p $(dir $@)
# $(CC) -c $(C_FLAGS) $< -o $@
$(BUILD_OBJ_DIR)%.o: %.cpp
mkdir -p $(dir $@)
$(CXX) -c $(C_FLAGS) $< -o $@
clean:
rm -rf ./build