Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

最近写的一个makefile,可以配置编成elf,静态库,动态库

$
0
0

#environment
SHELL=/bin/bash
MAKE=make

#compiler
CC=gcc
AR=ar
CR=cr


#directory
MAKE_DIR=$(PWD)
SRC_DIR=$(MAKE_DIR)/src/
OBJ_DIR=$(MAKE_DIR)/obj/
LIB_DIR=$(MAKE_DIR)/lib/
INCLUDE_DIR=$(MAKE_DIR)/includes
DEBUG_DIR=$(MAKE_DIR)/debug/
RELEASE_DIR=$(MAKE_DIR)/release/

#vpath
vpath %.cpp $(SRC_DIR)
vpath %.o $(OBJ_DIR)
vpath %.d $(OBJ_DIR)

#VPATH = $(SRC_DIR) $(OBJ_DIR)

#include
INCLUDE=-I$(INCLUDE_DIR)

#src file
SRC_FILES:=$(wildcard $(SRC_DIR)*.cpp)

#obj file
OBJ_FILES:=$(notdir $(patsubst %.cpp, %.o, $(SRC_FILES)))

#depend file, which generated by g++ -MMD xx.cpp $(INCLUDE)
DEPEND_FILES:=$(notdir $(patsubst %.cpp, %.d, $(SRC_FILES)))

#lib, which used for link.
LIBS:=
LIB=-L$(LIB_DIR) $(LIBS)

#LOCAL_MODULE_ELF, which means the final executable file for this module
LOCAL_MODULE_ELF:=calc

LOCAL_MODULE_STATIC_LIB:=libcalc.a

LOCAL_MODULE_DYNAMIC_LIB:=libcalc.so


#flag
FLAG_DEBUG=-g
FLAG_COMPLE=-c
FLAG_LINK=

#debug
DEBUG=1

ifeq ($(DEBUG),1)
OUTPUT_DIR:=$(DEBUG_DIR)
FLAG_COMPLE:=$(FLAG_DEBUG) $(FLAG_COMPLE)
FLAG_LINK:=
else
OUTPUT_DIR:=$(RELEASE_DIR)
FLAG_COMPLE:=$(FLAG_COMPLE)
FLAG_LINK:=
endif

#output
OUTPUT_ELF=$(OUTPUT_DIR)$(LOCAL_MODULE_ELF)
OUTPUT_STATIC_LIB=$(OUTPUT_DIR)$(LOCAL_MODULE_STATIC_LIB)
OUTPUT_DYNAMIC_LIB=$(OUTPUT_DIR)$(LOCAL_MODULE_DYNAMIC_LIB)

.PHONY: all help dir elf staticlib dynamiclib obj move clean cleanall

all:dir obj

#放在任何命令之前
include $(DEPEND_FILES)

help:
 @echo "A simple makefile!"

dir:
 mkdir -p $(OBJ_DIR)
 mkdir -p $(LIB_DIR)
 mkdir -p $(DEBUG_DIR)
 mkdir -p $(RELEASE_DIR)
 
obj:$(OBJ_FILES)

move:
 mv -f *.o $(OBJ_DIR)
 mv -f *.d $(OBJ_DIR)

%.d:$(SRC_DIR)%.cpp
 @echo "~~~~~~~~~~~~~~~~~~"
 $(CC) -MM -MD $^ $(INCLUDE)
 
%.o:
 @echo "------------------"
 $(CC) -fPIC -c $< -o $@ $(INCLUDE)

elf:$(OBJ_FILES)
 @echo "building elf..."
 @echo "OBJ_FILES: $(OBJ_FILES)"
 @echo "LIB: $(LIB)"
 @echo "OUTPUT_ELF: $(OUTPUT_ELF)"
 $(CC) $(FLAG_LINK) -o $(OUTPUT_ELF) $(OBJ_FILES) $(LIB)
 
staticlib:$(OBJ_FILES)
 @echo "building static lib..."
 @echo "OUTPUT_LIB: $(OUTPUT_STATIC_LIB)"
 $(AR) $(CR) $(OUTPUT_STATIC_LIB) $(OBJ_FILES)
 
dynamiclib:$(OBJ_FILES)
 @echo "building dynamic lib..."
 @echo "OUTPUT_LIB: $(OUTPUT_DYNAMIC_LIB)"
 $(CC) -shared -o $(OUTPUT_DYNAMIC_LIB) $(OBJ_FILES)
 
clean:
 @rm -f $(OBJ_DIR)* *.d *.o
 @rm -f $(OUT)
 @clear 

cleanall:
 @rm -f $(OBJ_DIR)*
 @rm -f $(RELEASE_DIR)*
 @rm -f $(DEBUG_DIR)*

作者:liuyangsyouxiang 发表于2013-3-19 23:59:08 原文链接
阅读:40 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>