lxyfirst

C++博客 首页 新随笔 联系 聚合 管理
  33 Posts :: 3 Stories :: 27 Comments :: 0 Trackbacks
1.根据int main特征确定binary文件名,需要自定义。
2.支持对头文件的依赖。
3.支持debug/release不同编译。
供参考:
SRCS=$(wildcard *.cpp)
BIN_SRCS
=$(shell grep "int main" -l *.cpp)
LIB_SRCS
=$(patsubst $(BIN_SRCS),,$(SRCS))

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

LIB_OBJS
=$(patsubst %.cpp,%.o,$(LIB_SRCS))
BINS
=$(patsubst %.cpp,%,$(BIN_SRCS))

LIB_NAME
=
SO_LIB
=$(patsubst %,lib%.so,$(LIB_NAME))
STATIC_LIB
=$(patsubst %,lib%.a,$(LIB_NAME))


CC
=g++
CFLAGS
= -Wall -D_REENTRANT -D_GNU_SOURCE -fPIC
LDFLAGS
=
BOOST_DIR 
= /usr/local/include/boost/
THRIFT_DIR 
= /usr/local/include/thrift
#INC_DEP
= -I${THRIFT_DIR} -I${BOOST_DIR}  -I. 
INC_DEP
= -I.
LIB_DEP
= -lcurl -lpcrecpp

ifeq ($(release)
, 1)
CFLAGS +
= -O2 -DNDEBUG
else
CFLAGS +
= -g -DDEBUG
endif

all: $(BINS) $(SO_LIB) $(STATIC_LIB)

$(BINS): % : %.o $(LIB_OBJS)
    $(CC) $(LDLAGS) $(LIB_DEP) -o $@ $^  
$(SO_LIB): $(LIB_OBJS)
    $(CC) $(CFLAGS) -shared -o $@ $^ 
$(STATIC_LIB): $(LIB_OBJS)
    ar -rcs -o $@ $^ 
dist :
    rm -f $(DEPS)
clean:
    rm -f $(BINS) $(OBJS) $(DEPS) $(SO_LIB) $(STATIC_LIB)
release: clean
    @make release
=1

%.d : %.cpp
    $(CC) -MM $(INC_DEP)  $< >$@
%.o : %.cpp
    $(CC) $(CFLAGS) $(INC_DEP) -c  $< 

-include  $(DEPS)
posted on 2011-05-31 19:17 star 阅读(179) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理