-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmakefile
executable file
·72 lines (56 loc) · 1.64 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
############################## DIRECTIONS ##############################
SOLUTION_DIR := .
OBJ_DIR := ./obj
BIN_DIR := ./bin
INC_DIRS := ./include
SRC_DIRS := ./src
############################## OPTIONS ##############################
CC := g++
CCFLAGS :=
LDFLAGS :=
INCFLAGS :=
############################## TARGET ##############################
TARGET := test
############################## BUILD RULE ##############################
vpath %.h $(INC_DIRS)
vpath %.cpp $(SRC_DIRS)
SRCS := $(shell find $(SRC_DIRS) -name "*.cpp")
SRCS := $(foreach V,$(SRCS),$(shell readlink -f $(V)))
SOLUTION_DIR := $(shell readlink -f $(SOLUTION_DIR))
SRCS := $(subst $(SOLUTION_DIR),$(OBJ_DIR),$(SRCS))
SRCS := $(sort $(SRCS))
OBJS := $(SRCS:%.cpp=%.o)
DEPS := $(OBJS:%.o=%.d)
BASE_DIR := $(dir $(OBJS))
BASE_DIR := $(sort $(BASE_DIR))
INCFLAGS += $(addprefix -I,$(INC_DIRS))
$(BIN_DIR)/$(TARGET) : $(OBJS)
@echo Link..
@$(CC) -o $(BIN_DIR)/$(TARGET) $^ $(LDFLAGS);
@echo Build: $(TARGET)
$(OBJ_DIR)/%.d : $(SOLUTION_DIR)/%.cpp
@set -e;
@rm -f $@;
@$(CC) -MM $< $(INCFLAGS) > [email protected];
@sed "s,^[^\ ].*\.o,$@ ,g" < [email protected] >> $@;
@sed "s,^[^\ ].*\.o,$(subst .d,.o,$@) ,g" < [email protected] >> $@;
@echo -e "\t"$(CC) -c $< -o $(subst .d,.o,$@) $(INCFLAGS) $(CCFLAGS) >> $@;
@rm -f [email protected];
@echo Build: $@;
ifeq ($(MAKECMDGOALS), )
sinclude $(DEPS)
endif
.PHONY : info
info :
@echo $(OBJS)
@echo $(DEPS)
@echo $(BASE_DIR)
.PHONY : dir
dir :
@mkdir -p $(BASE_DIR) $(BIN_DIR)
@echo Create: $(OBJ_DIR) $(BIN_DIR)
.PHONY : clean
clean :
@rm -rf $(BIN_DIR)/$(TARGET) $(OBJ_DIR)
@echo Clean: $(TARGET)
############################## END ##############################