makefile 示例1

# 设置编译器
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

原文地址:https://www.cnblogs.com/sylar-liang/p/4334421.html