makefile的常用方法

自: http://www.cppblog.com/Khan/archive/2007/03/28/20762.html 

# Project: m3server
# Makefile created by Khan.Lau

# 应用程序名
BIN  = m3server.exe
LIB  = m3server.a

# 输出目录
CONFIGURATION  = debug
#CONFIGURATION = release

# 取得项目的当前工作路径
PROJECT_PATH := $(shell cd)\src

CPP  = g++
CC   = gcc

COMPILER = $(CPP)


# c/c++库路径
LIBPATH = "D:/Develop/CPlus/MinGW/lib"
    

WINDRES = windres.exe
RES  =

LINKOBJ  = $(CONFIGURATION)/Khan_Queue.o \
    $(CONFIGURATION)/db_mysql.o \
    $(CONFIGURATION)/ThreadPool.o \
    $(CONFIGURATION)/Util.o \
    $(CONFIGURATION)/m3server.o \
    $(CONFIGURATION)/CppObject.o \
    $(CONFIGURATION)/CppSocket.o \
    $(CONFIGURATION)/CppUdpSocket.o \
    $(CONFIGURATION)/CppServerSocket.o \
    $(CONFIGURATION)/ReadConfig.o \
    $(RES)

# 包路径
LIBS =  -L$(LIBPATH)\
    -lws2_32\
    -L"D:/Develop/CPlus/mysql5.0/lib" -lmysql\
    -L"D:/Develop/CPlus/pthread/Pre-built.2/lib" -lpthreadGC2



# c的类库路径
INCS =  -I$(LIBPATH)/include


# c++的类库路径
CXXINCS =  -I$(LIBPATH)/include\
    -I$(LIBPATH)/include/c++/3.2.3\
    -I$(LIBPATH)/include/c++/3.2.3/backward\
        -I$(LIBPATH)/include/c++/3.2.3/mingw32\
    -I"D:/Develop/CPlus/pthread/Pre-built.2/include"\
    -I$(PROJECT_PATH)\
    -I"D:/Develop/CPlus/mysql5.0/include"

CXXFLAGS = -g -Wall $(CXXINCS)  
CFLAGS = -g -Wall $(INCS)  
RM = rm -f

.PHONY: all all-before all-after clean clean-custom rebuild strip

all: all-before $(LIB) $(BIN) all-after

clean: clean-custom
    ${RM} $(LINKOBJ) $(CONFIGURATION)/$(BIN) $(CONFIGURATION)/$(LIB)


#打包静态库
$(LIB): $(LINKOBJ)
    ar -r $(CONFIGURATION)/$(LIB) $(LINKOBJ)

$(BIN): $(LINKOBJ)
    $(COMPILER) $(CONFIGURATION)/$(LIB)  -o $(CONFIGURATION)/$(BIN) $(LIBS)


#缩减可执行文件大小
strip:
    strip $(CONFIGURATION)/$(BIN)

##################################################################################

#类库
$(CONFIGURATION)/Khan_Queue.o: src/lib/Khan_Queue.c
    $(COMPILER) -c src/lib/Khan_Queue.c -o $(CONFIGURATION)/Khan_Queue.o $(CXXFLAGS)

$(CONFIGURATION)/db_mysql.o: src/lib/db_mysql.c
    $(COMPILER) -c src/lib/db_mysql.c -o $(CONFIGURATION)/db_mysql.o $(CXXFLAGS)

$(CONFIGURATION)/ThreadPool.o: src/lib/ThreadPool.c
    $(COMPILER) -c src/lib/ThreadPool.c -o $(CONFIGURATION)/ThreadPool.o $(CXXFLAGS)

$(CONFIGURATION)/Util.o: src/lib/Util.c
    $(COMPILER) -c src/lib/Util.c -o $(CONFIGURATION)/Util.o $(CXXFLAGS)

$(CONFIGURATION)/CppObject.o: src/lib/CppObject.cpp
    $(COMPILER) -c src/lib/CppObject.cpp -o $(CONFIGURATION)/CppObject.o $(CXXFLAGS)

$(CONFIGURATION)/CppSocket.o: src/lib/CppSocket.cpp
    $(COMPILER) -c src/lib/CppSocket.cpp -o $(CONFIGURATION)/CppSocket.o $(CXXFLAGS)

$(CONFIGURATION)/CppUdpSocket.o: src/lib/CppUdpSocket.cpp
    $(COMPILER) -c src/lib/CppUdpSocket.cpp -o $(CONFIGURATION)/CppUdpSocket.o $(CXXFLAGS)

$(CONFIGURATION)/CppServerSocket.o: src/lib/CppServerSocket.cpp
    $(COMPILER) -c src/lib/CppServerSocket.cpp -o $(CONFIGURATION)/CppServerSocket.o $(CXXFLAGS)

$(CONFIGURATION)/ReadConfig.o: src/lib/ReadConfig.cpp
    $(COMPILER) -c src/lib/ReadConfig.cpp -o $(CONFIGURATION)/ReadConfig.o $(CXXFLAGS)

###################################################################################

#核心代码
$(CONFIGURATION)/m3server.o: src/kernel/m3server.cpp
    $(COMPILER) -c src/kernel/m3server.cpp -o $(CONFIGURATION)/m3server.o $(CXXFLAGS)

###################################################################################

rebuild: clean all

Makefile 是一个用于管理和自动化软件项目中的编译和构建过程的工具。通过 Makefile,可以定义一系列规则和依赖关系,告诉计算机如何构建和更新项目。 以下是 Makefile 的基本使用方法: 1. 创建一个名为 "Makefile" 或 "makefile" 的文件,并将其放置在项目根目录下。 2. 在 Makefile 中定义规则。每个规则由以下几部分组成: - 目标(Target):规定了要生成的文件或执行的操作。 - 依赖(Dependencies):规定了生成目标所需要的文件或操作。 - 命令(Command):规定了生成目标的具体操作。 例如,下面是一个简单的 Makefile 示例: ```makefile target: dependency1 dependency2 command1 command2 ``` 3. 定义规则后,可以在命令行中使用 `make` 命令执行 Makefile 中的规则。例如,要执行上述示例中的目标 `target`,可以运行命令: ``` make target ``` 4. Makefile 还提供了一些特殊的变量和函数,可以用于更灵活地定义规则。一些常用的变量包括: - `CC`:C 编译器的名称。 - `CFLAGS`:编译选项。 - `LDFLAGS`:链接选项。 - `SRC`:源文件列表。 - `OBJ`:目标文件列表。 - `BIN`:生成的可执行文件名。 你可以在规则中使用这些变量,例如: ```makefile CC = gcc CFLAGS = -Wall -O2 target: $(OBJ) $(CC) $(LDFLAGS) -o $(BIN) $(OBJ) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ ``` 这是 Makefile 的基本使用方法,通过定义规则和使用 make 命令,你可以自动化编译和构建项目。更复杂的项目可能需要更详细的 Makefile 配置,你可以查阅相关文档来深入了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值