一个创建工程目录的shell脚本

本文介绍了一个用于自动化创建工程目录结构及Makefile配置的bash脚本,该脚本可以根据不同的参数选择性地生成CMake或Makefile相关文件,并详细展示了Makefile的内容设置,包括变量定义、编译规则等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值