编译动态库模板
######################################################################
# makefile 模版
#
######################################################################
###################项目路径和程序名称#################################
DIR=$(shell pwd)
BIN_DIR=$(DIR)/bin
LIB_DIR=$(DIR)/lib
SRC_DIR=$(DIR)/src
INCLUDE_DIR=$(DIR)/include
OBJ_DIR=$(DIR)/obj
DEPS_DIR=$(DIR)/deps
#PROGRAM=$(BIN_DIR)/test
PROGRAM=$(LIB_DIR)/test
###################OBJ文件及路径############################################
EXTENSION=c
OBJS=$(patsubst $(SRC_DIR)/%.$(EXTENSION), $(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.$(EXTENSION)))
DEPS=$(patsubst $(OBJ_DIR)/%.o, $(DEPS_DIR)/%.d, $(OBJS))
###################include头文件路径##################################
INCLUDE=\
-I$(INCLUDE_DIR)\
-I/usr/local/include \
-I/usr/include/libxml2
###################lib文件及路径######################################
LINK_LIB_DIRS=-Llib
###################编译选项及编译器###################################
CC=gcc
CFLAGS=-Wall -W -g -fPIC
LDFLAGS=$(LINK_LIB_DIRS) -lxml2 -lsqlite3 -lcurl -lcrypto -Wl,-rpath -Wl,lib
###################编译目标###########################################
.PHONY: all clean rebuild
all:$(OBJS)
@echo $(DEPS_DIR)
$(CC) -shared -o $(PROGRAM) $(OBJS) $(LDFLAGS)
$(DEPS_DIR)/%.d: $(SRC_DIR)/%.$(EXTENSION)
$(CC) -MM $(INCLUDE) $(CFLAGS) $< | sed -e 1's,^,$(OBJ_DIR)/,' > $@
sinclude $(DEPS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.$(EXTENSION)
$(CC) $< -o $@ -c $(CFLAGS) $(INCLUDE)
rebuild: clean all
clean:
rm -rf $(OBJS) $(BIN_DIR)/*
编译可执行程序
######################################################################
# makefile 模版
#
######################################################################
###################项目路径和程序名称#################################
DIR=$(shell pwd)
BIN_DIR=$(DIR)/bin
LIB_DIR=$(DIR)/lib
SRC_DIR=$(DIR)/src
INCLUDE_DIR=$(DIR)/include
OBJ_DIR=$(DIR)/obj
DEPS_DIR=$(DIR)/deps
#PROGRAM=$(BIN_DIR)/test
PROGRAM=$(BIN_DIR)/implog
##############################安装路径#################################
INSTALL_DIR=/home/zhou/src/install/
###################OBJ文件及路径############################################
EXTENSION=cpp
OBJS=$(patsubst $(SRC_DIR)/%.$(EXTENSION), $(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.$(EXTENSION)))
DEPS=$(patsubst $(OBJ_DIR)/%.o, $(DEPS_DIR)/%.d, $(OBJS))
###################include头文件路径##################################
INCLUDE=\
-I$(INCLUDE_DIR)
###################lib文件及路径######################################
LINK_LIB_DIRS=-L/usr/lib/mysql
###################编译选项及编译器###################################
CC=g++
CFLAGS=-Wall -W -g
LDFLAGS=$(LINK_LIB_DIRS) -lmysqlclient
###################编译目标###########################################
.PHONY: all clean rebuild
all:$(OBJS)
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
$(DEPS_DIR)/%.d: $(SRC_DIR)/%.$(EXTENSION)
$(CC) -MM $(INCLUDE) $(CFLAGS) $< | sed -e 1's,^,$(OBJ_DIR)/,' > $@
sinclude $(DEPS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.$(EXTENSION)
$(CC) $< -o $@ -c $(CFLAGS) $(INCLUDE)
install:all
mv $(BIN_DIR)/implog $(INSTALL_DIR)
rebuild: clean all
clean:
rm -rf $(OBJS) $(BIN_DIR)/*
shell 修改 方案
#!/bin/bash
DIR=`pwd`
BIN_DIR=${DIR}/bin
LIB_DIR=${DIR}/lib
SRC_DIR=${DIR}/src
INCLUDE_DIR=${DIR}/include
OBJ_DIR=${DIR}/obj
DEPS_DIR=${DIR}/deps
function mk_dir()
{
for i in $@;
do
if [ ! -d $i ];then
mkdir -p $i
chown zhou:zhou $i
fi
done
}
mk_dir $BIN_DIR $SRC_DIR $INCLUDE_DIR $OBJ_DIR $LIB_DIR $DEPS_DIR
check=`find $DIR -maxdepth 1 -name "*.cpp" -o -name "*.c" -type f`
if [ "x$check" != "x" ];then
list=`find $DIR -name "*.cpp" -type f`
if [ "x$list" != "x" ];then
sed -i 's/^CC=.*/CC=g++/g' Makefile
sed -i 's/^EXTENSION.*/EXTENSION=cpp/g' Makefile
mv $DIR/*.cpp $SRC_DIR
else
mv $DIR/*.c $SRC_DIR
fi
fi
if [ "x`find $DIR -maxdepth 1 -name "*.h" -type f`" != "x" ];then
mv $DIR/*.h $INCLUDE_DIR
fi
if [ "x`find $SRC_DIR -maxdepth 1 -name '*.c' -o -name '*.cpp' -type f`" != "x" ] && [ "x`find $DIR -maxdepth 1 -name Makefile`" != "x" ];then
make
fi