-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile_apple
61 lines (50 loc) · 1.86 KB
/
makefile_apple
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
TARGET := securesocks5
CC := g++ -DUSE_STANDALONE_ASIO -std=c++17
#注意每行后面不要有空格,否则会算到目录名里面,导致问题
SRC_DIR := ./src
BUILD_DIR = tmp
OBJ_DIR = $(BUILD_DIR)/obj
DEPS_DIR = $(BUILD_DIR)/deps
#这里添加其他头文件路径
INC_DIR = \
-I./ \
-I./src \
-I./asio-1.16.1/include \
-I/usr/local/Cellar/[email protected]/1.1.1g/include
#这里添加编译参数
CC_FLAGS := $(INC_DIR) -ggdb3 -DDEBUG -Wextra -Wall -framework CoreFoundation #debug
#CC_FLAGS := $(INC_DIR) -O3 -DNDEBUG -Wextra -Wall -std=gnu++17 # release
LNK_LIBS += /Users/kkqin/Documents/glog/cmake/build/libglog.a
LNK_LIBS += `pkg-config --static --libs openssl`
#这里递归遍历3级子目录
DIRS := $(shell find $(SRC_DIR) -maxdepth 3 -type d)
#将每个子目录添加到搜索路径
VPATH = $(DIRS)
#查找src_dir下面包含子目录的所有cc文件
SOURCES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cc))
SOURCES := $(sort $(SOURCES))
OBJS = $(addprefix $(OBJ_DIR)/,$(patsubst %.cc,%.o,$(notdir $(SOURCES))))
DEPS = $(addprefix $(DEPS_DIR)/, $(patsubst %.cc,%.d,$(notdir $(SOURCES))))
$(TARGET):$(OBJS)
@echo "Link...";
$(CC) $^ $(LNK_FLAGS) $(LNK_LIBS) $(CC_FLAGS) -o bin/$@
@echo "DONE!"
#编译之前要创建OBJ目录,确保目录存在
$(OBJ_DIR)/%.o:%.cc
@if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi;\
$(CC) -c $(INC_DIR) $(LNK_FLAGS) $(CC_FLAGS) -o $@ $<
@echo $@
#编译之前要创建DEPS目录,确保目录存在 #前面加@表示隐藏命令的执行打印
$(DEPS_DIR)/%.d:%.cc
@if [ ! -d $(DEPS_DIR) ]; then mkdir -p $(DEPS_DIR); fi;
@set -e; rm -f $@;\
$(CC) -MM $< $(INC_DIR) > $@.$$$$;\
sed 's,\($*\)\.o[ :]*, $(OBJ_DIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$; \
echo Build: $@;
#前面加-表示忽略错误
-include $(DEPS)
.PHONY : clean
clean:
@rm -rf $(BUILD_DIR) bin/$(TARGET);
@echo "area clear!"