码迷,mamicode.com
首页 > 其他好文 > 详细

Makefile 小模板

时间:2016-08-15 01:30:58      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

     首先在工程文件夹下创建bin,src,lib,以及include等文件夹,在工程文件夹外创建lib或者lib64文件夹,将文件类型分别放入工程文件夹下的几个文件夹,然后根据实际需要对下面的Makefile1进行实际需要的改写即可,最终会在src下生成*.o等obj文件,以及在工程文件夹外的lib或者lib64下生成需要的静态库文件。这里并没有生成.exe执行文件

WORKROOT=../..

LIBNAME = flumelog

BIN_DIR = bin
SRC_DIR = src
LIB_DIR = lib

INCLUDE = -I./include -I/usr/local/include -I../lib64/thrift/include -I../cfg/include

INSTALL_PATH=$(WORKROOT)/flumelog

LIB     =  ../lib64/thrift/lib/libthrift.a ../cfg/lib/libcfg.a -static -lpthread

SOURCES = $(wildcard $(SRC_DIR)/*.cpp)
OBJS = $(patsubst %.cpp,%.o,$(SOURCES))

COMMON_DEFINES = -DLINUX -D_REENTERANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 

DEFINES=$(COMMON_DEFINES)
#CXXFLAGS= -fPIC -g -Wall -W $(DEFINES) $(INCLUDE) 
CXXFLAGS= -g -Wall -W $(DEFINES) $(INCLUDE) 

CXX = g++ 
AR  = ar
#=========================================================================
OUTPUT_LIB=lib$(LIBNAME).a

BIT:=$(shell getconf LONG_BIT)
ifeq (${BIT}, 64)
    OUTPUT_PATH=../lib64/$(LIBNAME)
else
    OUTPUT_PATH=../lib/$(LIBNAME)
endif

#-----------------------------------------------------------------#
# make all
#-----------------------------------------------------------------#
all: clean outputdir

outputdir: output
    if [ ! -d $(OUTPUT_PATH) ]; then mkdir $(OUTPUT_PATH); fi
    if [ ! -d $(OUTPUT_PATH)/lib ]; then mkdir $(OUTPUT_PATH)/lib; fi
    if [ ! -d $(OUTPUT_PATH)/include ]; then mkdir $(OUTPUT_PATH)/include; fi
    cp lib/$(OUTPUT_LIB) $(OUTPUT_PATH)/lib
    cp include/*.h $(OUTPUT_PATH)/include
#-----------------------------------------------------------------#
# make library
#-----------------------------------------------------------------#
output: $(OBJS) 
    if [ ! -d $(LIB_DIR) ]; then mkdir $(LIB_DIR); fi
    ar -ruv $(LIB_DIR)/$(OUTPUT_LIB) $(OBJS) 

$(OBJS): %.o: %.cpp
    $(CXX) -c $< -o $@ $(INCLUDE) $(LIB) $(CXXFLAGS)

#-----------------------------------------------------------------#
# make clean
#-----------------------------------------------------------------#
clean:
    rm -f $(OBJS) $(LIB_DIR)/*.a

#-----------------------------------------------------------------#
# make install
#-----------------------------------------------------------------#
install: outputdir
    if [ ! -d $(INSTALL_PATH) ]; then mkdir -p $(INSTALL_PATH); fi
    cp -rf $(OUTPUT_PATH)/* $(INSTALL_PATH)

这里是Makefile2,利用前面生成的libflumelog.a以及所依赖的库,即可生成最终的exe文件,同样适合套用

test: test.cpp
    g++ -g -o test -DHAVE_NETINET_IN_H     test.cpp     -I/usr/locl/include     -I../../cfg/include     -I../../lib64/thrift/include     -I../../lib64/flumelog/include/     -Wl,--start-group     ../../lib64/flumelog/lib/libflumelog.a     ../../lib64/thrift/lib/libthrift.a     ../../cfg/lib/libcfg.a     -lpthread     -Wl,--end-group

 

Makefile 小模板

标签:

原文地址:http://www.cnblogs.com/morebeauty/p/5771460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!