Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59213
  • 博文数量: 5
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-13 13:01
文章分类
文章存档

2010年(5)

我的朋友

分类: LINUX

2010-01-14 21:11:43

由于经常需要在Linux下写程序,根据资料写了一个较为全面的Makefile模板,以后使用起来就比较方便了。可以根据选择编译生成可执行文件、静态链接库和动态链接库。

==========================================

MODULES        := test
PROGNAME    := test
CPPFLAGS     := -g -Wall -fPIC -Wno-deprecated -D_FILE_OFFSET_BITS=64
USER_MACROS := DEBUG __PTHREADS_MUTEXES__ __linux__ __PTHREAD__

PY_INC        := /usr/local/python/include/python2.6/
INC_DIR        := ~/work/include
INC_PATH     := $(INC_DIR)/inc-me $(INC_DIR)/inc-third $(INC_DIR) #$(PY_INC)
LIB_PATH    := ~/work/lib
SHARE_PATH     := $(LIB_PATH)/share
STATIC_PATH    := $(LIB_PATH)/static

SHARE_LIBS     := #pthread testlib
STATIC_LIBS    := # libtestlib.a
SRC_PATH    := .
OUTPUT_PATH    := ../bin/

EXE_NAME    := $(PROGNAME).exe
LIB_NAME    := $(addprefix lib, $(PROGNAME))
SHARE_NAME    := $(LIB_NAME).so
STATIC_NAME    := $(LIB_NAME).a

SRC_DIRS    := $(addprefix $(SRC_PATH)/,$(MODULES))
SRC_C        := $(foreach SRC_DIRS,$(SRC_DIRS), $(wildcard $(SRC_DIRS)/*.c))
SRC_CPP        := $(foreach SRC_DIRS,$(SRC_DIRS), $(wildcard $(SRC_DIRS)/*.cpp))
OBJ_C        := $(patsubst %.c,%.o,$(SRC_C))
OBJ_CPP        := $(patsubst %.cpp,%.o,$(SRC_CPP))
SRCS        := $(SRC_C) $(SRC_CPP)
OBJS        := $(OBJ_C) $(OBJ_CPP)
MAIN_SRC    := $(SRC_PATH)/main.cpp
MAIN_OBJ    := $(SRC_PATH)/main.o

CXX            := g++
CC            := gcc
AR            := ar
ARFLAGS        := -rc

.SECONDARY    :%.o %(OBJS)

build:    $(EXE_NAME)
    mv $(EXE_NAME) $(OUTPUT_PATH)

static:    $(STATIC_NAME)
    mv $(STATIC_NAME) $(OUTPUT_PATH)

share:    $(SHARE_NAME)
    mv $(SHARE_NAME) $(OUTPUT_PATH)

touch:
    touch $(SRCS) $(MAIN_SRC)

clean:
    @echo "Clean ..."
    @rm -f $(OBJS) $(MAIN_OBJ)
    @rm -f $(EXE_NAME) $(STATIC_NAME) $(SHARE_NAME)
    @rm -f *~ */*~

# Compiling to object files.
%.o:%.cpp
    @echo "Compile $@ ($<)."
    @$(CXX) $(CPPFLAGS) $(addprefix -D , $(USER_MACROS)) -I $(SRC_PATH) $(addprefix -I, $(INC_PATH)) -c $< -o $@

%.o:%.c
    @echo "Compile $@ ($<)."
    @$(CC) $(CPPFLAGS) $(addprefix -D , $(USER_MACROS)) -I $(SRC_PATH) $(addprefix -I, $(INC_PATH)) -c $< -o $@


# Linking to execute file.
$(EXE_NAME): $(OBJS) $(MAIN_OBJ)
    @echo "Linking to execute ($@ : $(OBJS) $(MAIN_OBJ))."
    @$(CXX) $(CPPFLAGS) -o $@ $(OBJS) $(MAIN_OBJ) $(addprefix -L,$(SHARE_PATH)/) $(addprefix -l,$(SHARE_LIBS)) $(addprefix $(STATIC_PATH)/,$(STATIC_LIBS))

# Archive to static library.
$(STATIC_NAME): $(OBJS)
    @echo "Archive to static library ($@ [$(OBJS)])."
    @${AR} ${ARFLAGS} $@ $(OBJS)

# Linking to share ( dynamic ) library.
$(SHARE_NAME): $(OBJS)
    @echo "Linking to shared library ($@ [$(OBJS)])."
    @$(CXX) $(CPPFLAGS) -o $@ $(OBJS) -shared $(addprefix -L,$(SHARE_PATH)/) $(addprefix -l,$(SHARE_LIBS)) $(addprefix $(STATIC_PATH)/,$(STATIC_LIBS))

========= 附件
文件:Makefile.tar
大小:4KB
下载:下载

阅读(7632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~