Chinaunix首页 | 论坛 | 博客
  • 博客访问: 765979
  • 博文数量: 116
  • 博客积分: 923
  • 博客等级: 准尉
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-06 21:43
个人简介

一直帮老板搬运代码!!!

文章分类
文章存档

2013年(47)

2012年(69)

分类: LINUX

2012-12-16 09:39:53

如果对于,源码性编译,一般采用nginx方式(手动编写)或采用autoconf方式
如果对于,非源码性,那么可以使用匹配功能,如下:
#use make clean
SHELL = /bin/sh
CC    = g++
AR    = ar r #打包成静态库函数
MAKE  = make
MAKE_DIR = $(PWD)
#SRC_DIR  = $(MAKE_DIR)/
OBJ_DIR  = $(MAKE_DIR)/../Obj/LinuxObj/GameServer_Obj/
LIB_DIR  = $(MAKE_DIR)/../../Framework/Lib/
INCLUDE_DIR = $(MAKE_DIR)/../Include/LinuxInclude/
DEBUG_DIR = $(MAKE_DIR)/../Bin/LinuxDebug/GameServer_Debug/
RELEASE_DIR = $(MAKE_DIR)/../Bin/LinuxRelease/GameServer_Release/
C_SUFF=.cpp
OUTPUT_FILE = NewLogServer #目标函数
#OUTPUT_FILE = tst
#OUTPUT_FILE =SharedLib.a
CPPFLAG_DEBUG     = -g -c
CPPFLAG_RELEASE   = -c

INCLUDE     = -I./ -I$(INCLUDE_DIR) -I/usr/local/mysql/include -I../../../src/shared -I../../Framework/Src
SUMDIR      = ./
#遍历目录
SUMINCH     = $(shell find $(SUMDIR) -name '*.h') #查找目录下面的头文件
SUMINCHDIR  = $(dir $(SUMINCH))  #获取头文件的目录
#INCLUDE    += $(foreach temp,$(SUMINCHDIR),(ifneq ($(temp),$(OBJ_DIR)) -I$(temp) endif))
INCLUDE    += $(foreach temp,$(SUMINCHDIR), -I$(temp)) #遍历头文件的目录,添加包含选项
SRC_FILE = $(shell find $(SUMDIR) -name '*$(C_SUFF)') #找出所有的源文件
#SRC_FILE        += $(foreach temp,$(SUMINCH),$(shell find $(temp) -name '*$(C_SUFF)'))
#SRC_FILE        += $(wildcard *$(C_SUFF))
#SRC_DIR = $(foreach temp,$(SUMINCHDIR),$(temp))
vpath %$(C_SUFF) $(SUMINCHDIR) #%表示零个或若干个字符,VPATH=src:../headers 在当前目录找不到的情况下,去这个目录查找,以冒号分开
vpath %.o   $(OBJ_DIR) #符合.o模式搜索OBJ_DIR指定的路径,在当前目录下找不到的话,可以用:分开
vpath %.d   $(OBJ_DIR)
OBJ_FILENDIR     =  $(notdir $(patsubst %$(C_SUFF), %.o, $(SRC_FILE))) #patsubst 模式替换函数,从src查找符合c_suff模式,使用%.o替换
DEP_FILENDIR     =  $(notdir $(patsubst %$(C_SUFF), %.d, $(SRC_FILE))) #notdir取得非目录形式
#DEP_FILE     =   $(patsubst %$(C_SUFF), %.d, $(SRC_FILE))
DEP_FILE     =  $(addprefix $(OBJ_DIR),$(DEP_FILENDIR)) #addprefix加前缀函数,把OBJ_DIR前缀添加到每个文件DEP_FILENDIR前面
OBJ_FILE     =  $(addprefix $(OBJ_DIR),$(OBJ_FILENDIR)) #所有的.o文件和他们的
#设置是否是测试还是版本的测试
DEBUG=1
ifeq ($(DEBUG),1)
OUTPUT_DIR:=$(DEBUG_DIR) #输出的目录:=使得变量展开,防止重复展开
FLAG_COMPLE := $(CPPFLAG_DEBUG) -DENABLE_DATABASE_MYSQL -D__LINUX__
LIB       := -L$(LIB_DIR) -L$(DEBUG_DIR)
else
OUTPUT_DIR:=$(RELEASE_DIR)
FLAG_COMPLE := $(CPPFLAG_RELEASE) -DENABLE_DATABASE_MYSQL -D__LINUX__
LIB       := -L$(LIB_DIR) -L$(RELEASE_DIR)
endif
OUT = $(OUTPUT_DIR)$(OUTPUT_FILE) #组合输出文件和目录
$(OUT): $(OBJ_FILE)
 @echo  "building:"
 @echo "\n\t please wait1...\n"
# $(CC) $(addprefix $(OBJ_DIR),$(notdir $^)) $(LIB) -o $@
# $(CC) $(OBJ_FILE) $(LIB) -lpthread -lz libcrypto.a libmysqlclient.a -o $@
 $(CC) $(OBJ_FILE) -o $@ -lpthread $(LIB) -lSharedLib -lmysqlclient -lz -lFramework -lz -ldl #$@表示规则中目标文件集合,这里指的是OUT

# $(AR) $(OBJ_FILE) #压缩成库文件 
#$(OBJ_FILE):%.o:%.c
#这里使用的是静态模式
$(OBJ_FILE):%.o: %.d  #.d是源文件的依赖关系存放的地方(也是一个makefile文件),要不文件就会每次迂回查找,这里表示所有的.O文件来自OBJ_FILE,.O文件来自于.d文件,其里面有所有依赖的文件
 @echo  "building: "
 @echo "\n\t please wait2...\n"
# $(CC) $(FLAG_COMPLE) $< $(INCLUDE) -o $@
 $(CC) $(FLAG_COMPLE) $(shell find $(SUMDIR) -name $(notdir $(patsubst %.o, %$(C_SUFF), $@))) $(INCLUDE) -o $@ #生成.o文件
#include $(addprefix ./Obj/,$(DEP_FILENDIR))
#$(DEP_FILE) :$(SRC_FILE)
#include $(DEP_FILE)
#$(DEP_FILE):$(SUMINCHDIR)%.c
#$(DEP_FILE):%.d:$(shell find $(SUMDIR) -name %.c)
#$(DEP_FILE):$(SRC_FILE)
$(DEP_FILE):$@  #.d文件来源于它本身,生成.d文件
 @echo  "building: "
 @echo  $(notdir $@)
 @echo  "\n\t please wait3...\n"
 $(CC) $(INCLUDE) -MM $(FLAG_COMPLE) $(shell find $(SUMDIR) -name $(notdir $(patsubst %.d, %$(C_SUFF), $@))) >  ; \ #生成之后输入到零时文件
 sed 's,\($*\)\.o[ :]*,\1.o ' < > $@; \ #把保存的临时文件保存到.d文件里面
 rm -f #删除临时文件
# $(CC) $(FLAG_COMPLE) $< $(INCLUDE) -o $@
include $(DEP_FILE) #引用其他makefile的文件,包含所有。d的文件,这里不使用也行,因为上面已经生成。o文件
.PHONY: dir clean clean1 test #伪目标,指定不需要编译。如果放在第一个,可以同时生成多个目标。例如:all : pg1 pg2 pg3;./PHONY :all
.SUFFIXES: #删除默认隐含规则的后缀,有些是使用后缀列表的
dir:
# mkdir -p $(SRC_DIR)
 mkdir -p $(OBJ_DIR)
 mkdir -p $(LIB_DIR)
 mkdir -p $(INCLUDE_DIR)
 mkdir -p $(DEBUG_DIR)
 mkdir -p $(RELEASE_DIR)
clean:
 -rm -f $(OBJ_DIR)*.o
 -rm -f $(OBJ_DIR)*.d
 -rm -f $(OUT)
# -rm -f $(OBJ_DIR)*.*
TEMPOBJ = *.o
TEMPOBJ += $(foreach temp,$(SUMINCH), $(wildcard $(temp)/*.o))
clean1:
# TEMPOBJ += $(foreach temp,$(SUMINCH), $(wildcard (temp)%.o))
 -rm -f $(TEMPOBJ)
test: #可以用test测试变量
# @echo $(SUMINCH)
# @echo $(TEMPOBJ)
# @echo $(OBJ_DIR)/%.o
# @echo $(OBJ_FILE)
# @echo $(SRC_FILE)
# @echo $(DEP_FILE)
# @echo $(DEP_FILENDIR)
# @echo $(INCLUDE)
# @echo $(OBJ_DIR)%d
# @echo $(SUMINCHDIR)
 @echo $(LIB)
阅读(3011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~