# 设置编译器
CC = g++
# -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码
# -D宏定义,相当于C中的全局#define,可以通过宏定义来控制源程序的编译,例如:
# #ifdef _FILELINE
# printf("Hello Yu Qiang, How are you?
");
# #else
# printf("Sorry to lost you.
");
# #endif
# 程序最终调用输出是: Hello Yu Qiang, How are you?
CFLAG = -g -fPIC -D_FILELINE
# mysql的头文件
MYSQLINC = /usr/include/mysql
INC = -I -Iinclude -I$(MYSQLINC)
# mysql库目录
MYSQLLIB = -L /usr/lib64/mysql -l mysqlclient -lz -lm
# 服务器目标
SERVEROBJS = src/file1.o src/file2.o src/file3.o
# 客户端目标
CLIENTOBJS = src/f1.o src/f2.o
# bin目录
BINDIR = bin
# checkbin 检查是否存在bin目录
# 在bin目录下生成 Server 与 Client
all: checkbin $(BINDIR)/Server $(BINDIR)/Client
# 生成 Server
# $^ 所有.o文件
# $@ 所有.c文件
$(BINDIR)/Server: $(SERVEROBJS)
$(CC) -g $(MYSLQLIB) $^ -o $@
# 生成Client
$(BINDIR)/Clietn: $(CLIENTOBJS)
$(CC) -g $(MYSQLLIB) $^ -o $@
# .SUFFIXES 连接后缀,把.o .cpp .c .cpp.o 这些文件连接起来编译。当前makefile内支持文件后缀的类型列表。
.SUFFIXES: .c .o .cpp
.cpp.o:
$(CC) $(CFLAG) $(INC) -o $@ -c $<
# .PHONY 伪目标
.PHONY: checkbin
checkbin:
test -d "${BINDIR}" || mkdir $(BINDIR)
.PHONY: clean
clean:
-rm -f *.o
-rm -f $(BINDIR)/Server