一个创建工程目录的shell脚本
2017-06-10 22:41
405 查看
#!/bin/bash
#$1 为工程名
#遍历参数
for param in $@
do
case "$param" in
"CMAKE" )
CMAKE=1
echo "CMAKE=$CMAKE"
;;
"MAKE" )
MAKE=1
echo "MAKE=$MAKE"
;;
* )
echo "unknown $param"
;;
esac
done
#***************************************************************************
#cmake 函数
###########################################################################
#***************************************************************************
#填充Makefile函数
###########################################################################
fill_makefile()
{
echo "
CROSS?= arm-hisiv100nptl-linux-
ifeq (\$(origin CROSS), undefined)
export CROSS=
endif
GCC = \$(CROSS)gcc
GPP = \$(CROSS)g++
AR = \$(CROSS)ar
ROOT_DIR = .
LIB_DIR := -L\$(ROOT_DIR)/../lib
LIB_INC_DIR := -I\$(ROOT_DIR)/../include
INC_DIR := -I\$(ROOT_DIR)/include
SRC_DIR := \$(ROOT_DIR)/srcs
OBJ_DIR := \$(ROOT_DIR)/objs
LIB_TAG_DIR := \$(ROOT_DIR)/libs
TEST_DIR := \$(ROOT_DIR)/test
#***源代码文件*********************
SRCS := \$(shell find \$(SRC_DIR) -name '*.c')
SRCS := \$(sort \$(SRCS))
TEST := \$(shell find \$(TEST_DIR) -name '*.c')
TEST := \$(sort \$(TEST))
#***目标文件*********************
OBJS := \$(addprefix \$(OBJ_DIR)/,\$(notdir \$(patsubst %.c,%.o,\$(SRCS))))
LIBTARGET := \$(LIB_TAG_DIR)/lib$2.a
LIBTARGET_S := \$(LIB_TAG_DIR)/lib$2.so
TEST_TAG := \$(TEST_DIR)/example
#***库文件*********************
LDFLAGS := -lcurl
# Compiler flags, -g for debug, -c to make an object file
#
CFLAGS = -c -g
CFLAGS_T = -g
# Ar settings to build the library
ARFLAGS = -rcv
COMPILE = \$(GCC) \$(CFLAGS) \"\$<\" -o \$@ \$(LDFLAGS) \$(LIB_DIR) \$(INC_DIR) \$(LIB_INC_DIR)
all:\$(OBJS)
\$(AR) \$(ARFLAGS) -o \$(LIBTARGET) \$(OBJS)
\$(GCC) \$(OBJS) -fpic -shared -o \$(LIBTARGET_S)
@echo \"COMPILE all ok!\"
\$(GCC) -o \$(TEST_TAG) \$(TEST) \$(INC_DIR) \$(LIB_INC_DIR) -L\$(LIB_TAG_DIR) \$(LDFLAGS) \$(LIB_DIR) \$(CFLAGS_T) \$(LIBTARGET)
@chmod 777 * -R
\$(OBJS):\$(OBJ_DIR)/%.o : \$(SRC_DIR)/%.c
@echo \"\$< = \$@\"
\$(GCC) \"\$<\" -o \"\$@\" \$(INC_DIR) \$(LIB_INC_DIR) \$(CFLAGS)
clean:
@echo \"rm -f \$(OBJS) \$(LIBTARGET) \$(LIBTARGET_S) \$(TEST_TAG)\"
@rm -f \$(OBJS) \$(LIBTARGET) \$(LIBTARGET) \$(TEST_TAG)
" > $1
}
#***************************************************************************
#开始创建工程
###########################################################################
PWD=`pwd`
`mkdir $1`
PWD=$PWD/$1
echo "$PWD"
if [ $CMAKE ] ;then
`mkdir $PWD/build`
`touch $PWD/CMakeLists.txt`
fi
`mkdir $PWD/srcs`
if [ $CMAKE ] ; then
`touch $PWD/srcs/CMakeLists.txt`
fi
`mkdir $PWD/objs`
`mkdir $PWD/libs`
`mkdir $PWD/test`
`mkdir $PWD/include`
`mkdir $PWD/bin`
if [ $MAKE ] ; then
`touch $PWD/Makefile`
fill_makefile $PWD/Makefile $1
fi
#$1 为工程名
#遍历参数
for param in $@
do
case "$param" in
"CMAKE" )
CMAKE=1
echo "CMAKE=$CMAKE"
;;
"MAKE" )
MAKE=1
echo "MAKE=$MAKE"
;;
* )
echo "unknown $param"
;;
esac
done
#***************************************************************************
#cmake 函数
###########################################################################
#***************************************************************************
#填充Makefile函数
###########################################################################
fill_makefile()
{
echo "
CROSS?= arm-hisiv100nptl-linux-
ifeq (\$(origin CROSS), undefined)
export CROSS=
endif
GCC = \$(CROSS)gcc
GPP = \$(CROSS)g++
AR = \$(CROSS)ar
ROOT_DIR = .
LIB_DIR := -L\$(ROOT_DIR)/../lib
LIB_INC_DIR := -I\$(ROOT_DIR)/../include
INC_DIR := -I\$(ROOT_DIR)/include
SRC_DIR := \$(ROOT_DIR)/srcs
OBJ_DIR := \$(ROOT_DIR)/objs
LIB_TAG_DIR := \$(ROOT_DIR)/libs
TEST_DIR := \$(ROOT_DIR)/test
#***源代码文件*********************
SRCS := \$(shell find \$(SRC_DIR) -name '*.c')
SRCS := \$(sort \$(SRCS))
TEST := \$(shell find \$(TEST_DIR) -name '*.c')
TEST := \$(sort \$(TEST))
#***目标文件*********************
OBJS := \$(addprefix \$(OBJ_DIR)/,\$(notdir \$(patsubst %.c,%.o,\$(SRCS))))
LIBTARGET := \$(LIB_TAG_DIR)/lib$2.a
LIBTARGET_S := \$(LIB_TAG_DIR)/lib$2.so
TEST_TAG := \$(TEST_DIR)/example
#***库文件*********************
LDFLAGS := -lcurl
# Compiler flags, -g for debug, -c to make an object file
#
CFLAGS = -c -g
CFLAGS_T = -g
# Ar settings to build the library
ARFLAGS = -rcv
COMPILE = \$(GCC) \$(CFLAGS) \"\$<\" -o \$@ \$(LDFLAGS) \$(LIB_DIR) \$(INC_DIR) \$(LIB_INC_DIR)
all:\$(OBJS)
\$(AR) \$(ARFLAGS) -o \$(LIBTARGET) \$(OBJS)
\$(GCC) \$(OBJS) -fpic -shared -o \$(LIBTARGET_S)
@echo \"COMPILE all ok!\"
\$(GCC) -o \$(TEST_TAG) \$(TEST) \$(INC_DIR) \$(LIB_INC_DIR) -L\$(LIB_TAG_DIR) \$(LDFLAGS) \$(LIB_DIR) \$(CFLAGS_T) \$(LIBTARGET)
@chmod 777 * -R
\$(OBJS):\$(OBJ_DIR)/%.o : \$(SRC_DIR)/%.c
@echo \"\$< = \$@\"
\$(GCC) \"\$<\" -o \"\$@\" \$(INC_DIR) \$(LIB_INC_DIR) \$(CFLAGS)
clean:
@echo \"rm -f \$(OBJS) \$(LIBTARGET) \$(LIBTARGET_S) \$(TEST_TAG)\"
@rm -f \$(OBJS) \$(LIBTARGET) \$(LIBTARGET) \$(TEST_TAG)
" > $1
}
#***************************************************************************
#开始创建工程
###########################################################################
PWD=`pwd`
`mkdir $1`
PWD=$PWD/$1
echo "$PWD"
if [ $CMAKE ] ;then
`mkdir $PWD/build`
`touch $PWD/CMakeLists.txt`
fi
`mkdir $PWD/srcs`
if [ $CMAKE ] ; then
`touch $PWD/srcs/CMakeLists.txt`
fi
`mkdir $PWD/objs`
`mkdir $PWD/libs`
`mkdir $PWD/test`
`mkdir $PWD/include`
`mkdir $PWD/bin`
if [ $MAKE ] ; then
`touch $PWD/Makefile`
fill_makefile $PWD/Makefile $1
fi
相关文章推荐
- 一个自己写的自动格式化,开机挂载,创建用户和管理ACL权限的shell脚本
- Linux下使用Shell脚本快速创建项目目录模板
- 做一个创建cocos2d-x新项目的shell脚本
- L脚本语言 写一个清理VC工程目录的脚本
- shell 脚本为多个指定的目录创建报告
- 用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(一)
- 一个监控LINUX目录和文件变化的Shell脚本分享
- linux下设计一个Shell脚本:判断当前工作目录下所有的文件类型。
- shell脚本,根据时间范围压缩时间目录成一个文件
- shell脚本:批量创建多个子目录及二级子目录
- 通过linux的shell脚本批量创建用户名,用户名所属目录,设置对应密码
- SHELL脚本--用于检测一个或者多个对象是文件或者目录
- 通过linux的shell脚本批量创建用户名,用户名所属目录,设置对应密码
- shell脚本使用ssh命令连接主机,自动创建目录,分发程序,执行命令
- 为学习APUE(Unix环境高级编程)偷懒,而写的脚本,基本上相当于一个简单的工程创建脚本了
- 用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(三)
- shell 用svn目录创建本地目录脚本
- 输出android目录结构的一个shell 脚本
- 一个shell小案例(创建日期目录)
- shell-判断一个目录是否存在,不存在是否创建