项目管理的Makefile

项目使用Makefile来实现项目代码的编译、连接和清理等。 

使用centos5.9 系统),gcc编译器

1、总领Makefile

在项目最外面使用的Makefile,用来一次性编译多个程序(适用于多进程的程序管理)


调试选项

DEBUG_COMPILE_OPT =  -g -fno-eliminate-unused-debug-types -Werror $(MY_COMPILE_OPT)

#MY_COMPILE_OPT 是自己的编译选项 一般可以在 用户目录下 .bashrc文件中定义

优化选项

OPTIMIZE_COMPILE_OPT = -g


编译子目录名

SUB_DIRS =  util framework program1 program2 program3 program4 program5


export CXX = /usr/bin/g++


.PHONY : all debug  release ctags  distclean clean $(SUB_DIRS)


all: debug
                 
debug:
        @for dir in $(SUB_DIRS); \
                do \
                MY_COMPILE_OPT='$(DEBUG_COMPILE_OPT)' $(MAKE)   -C $$dir || exit 1; \
                done


release :
        @for dir in $(SUB_DIRS); \
                do \
                MY_COMPILE_OPT='$(OPTIMIZE_COMPILE_OPT)' $(MAKE) -C $$dir release || exit 1; \
                done


ctags:
        @ctags -R -h ".c.cpp.h" -o tags
#ctags 快捷命令 

distclean:
        @find . -iname .\*.d -exec rm \{\} \;

#清除gcc 生成的缓存文件和目标文件和编译的程序
clean:
        @for dir in $(SUB_DIRS); \
        do \
        $(MAKE) -C $$dir clean; \

        done


2、子目录Makefile

在各个子目录中的程序编译、连接使用的Makefile,这是其中一个

头文件目录

 CXXFLAGS = $(MY_COMPILE_OPT) -g -Wno-deprecated -I../3Party/protobuf-2.2.0/src -I../common -I../protocol -I../framework -Wall -I/usr/local/include/google/gflags  `mysql_config --cflags` `xml2-config --cflags` 

连接编译第三方的库
CXXLFLAGS = $(MY_COMPILE_OPT) -g -Wall -L../framework -lframework -L../framework -ltinyxml -L../framework -lpthread -lrt -lz  -ldl -lgflags `mysql_config --libs_r` `xml2-config --libs` 

连接编译自定义库
LIB_SKD = ../framework/libframework.a

产生目标文件(根据源文件)
OBJS =                  file1.o  \
                                file2.o   \
                                file3.o       
                             

SRCS = $(OBJS:%.o=%.cpp)
DEPS = $(OBJS:%.o=.%.d)

目标程序
ALL_TARGETS = program1


all: $(ALL_TARGETS)


include $(DEPS)
$(DEPS): .%.d: %.cpp
        @$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$


$(OBJS): %.o: %.cpp
        $(CXX) -c $(CXXFLAGS) $< -o $@
#编译自己的代码成目标代码,要导入头文件

$(ALL_TARGETS): $(OBJS) $(LIB_SKD) 
        $(CXX) $(OBJS) -o $@ $(CXXLFLAGS)
#目标文件连接库文件 ,编译生成目标程序

clean:
        @rm -rf ./.*.d  *.o $(ALL_TARGETS) core *~ 

#清除 生成的*.o文件和缓存文件 *.d 


#distclean 和clean命令 比较有用,有时候程序会有莫名其妙的错误 ,是由于缓存文件(*.o和*.d文件)引起的,清理一下就好了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值