bash shell自动生成Makefile文件

最近由于项目要从windows平台移植到linux平台,对于一个只在windows平台,且借着IDE开发的程序员来说,任务着实艰巨。

网上一翻搜索,发现大家都在用g++编译器,借着Makefile,进行c++项目编译。由于每新建一个c++文件,都得把新规则加进Makefile文件,太麻烦。感觉应该有更好的方法,网上又一翻搜索,发现make本身就有这个功能,只可惜Makefile文件编写教程没有一两页的,少则十来页,多则二三十页,着实吓我一跳。于是萌发了利用bash shell生成Makefile文件的想法。由于对bash shell属于入门级别,所以花了一下午才写出来。所得结果还是比较满意。下面贴出脚本代码。

 

#!/bin/bash
#auto create Makefile
#Author:psl
#email:iampsl@qq.com

#Configure Start
TARGET_NAME="a.out"
MAKEFILE_NAME="Makefile"
#You must set for you
INCLUDE_PATH="-I /usr/include/ "
LIB_PATH="-L /usr/lib/ "
LIBS=" "
DEPEND_COMMAND="g++ -MM $INCLUDE_PATH "
#debug:g++ -g -Wall -c
#release:g++ -O3 -Wall -c
COMPILE="g++ -g -Wall -c "
#static g++ -static
#share g++ -share
LINK="g++ "
#Configure End

#Genarate Makefile file
echo -n  "">$MAKEFILE_NAME

#Set Target Name
if test $1
then
TARGET_NAME=$1
fi

#Get all cpp files
CPP_FILES_COUNT=0
for TEMP_CPP_FILE in *.cpp
do
 CPP_FILES[$CPP_FILES_COUNT]=`basename $TEMP_CPP_FILE .cpp`
 CPP_FILES_COUNT=`expr $CPP_FILES_COUNT + 1`
done

#Link Rule
echo -n "${TARGET_NAME}:">>$MAKEFILE_NAME
i=0
while test $i -lt $CPP_FILES_COUNT
do
 echo -n "${CPP_FILES[$i]}.o  ">>$MAKEFILE_NAME
 i=`expr $i + 1`
done
echo "">>$MAKEFILE_NAME
echo -n " $LINK -o ${TARGET_NAME} ${LIB_PATH} ${LIBS} ">>$MAKEFILE_NAME
i=0
while test $i -lt $CPP_FILES_COUNT
do
 echo -n "${CPP_FILES[$i]}.o ">>$MAKEFILE_NAME
 i=`expr $i + 1`
done
echo "">>$MAKEFILE_NAME
#Link End

#Compile Rule
i=0
while test $i -lt $CPP_FILES_COUNT
do
 echo  "`$DEPEND_COMMAND ${CPP_FILES[$i]}.cpp`">>$MAKEFILE_NAME
 echo -n " $COMPILE ${INCLUDE_PATH} -o ${CPP_FILES[$i]}.o ${CPP_FILES[$i]}.cpp">>$MAKEFILE_NAME
 echo "">>$MAKEFILE_NAME
 i=`expr $i + 1`
done
#Compile End

#Clean Rule
echo "clean: ">>$MAKEFILE_NAME
echo -n " rm -f ">>$MAKEFILE_NAME
i=0
while test $i -lt $CPP_FILES_COUNT
do
 echo -n "${CPP_FILES[$i]}.o ">>$MAKEFILE_NAME
 i=`expr $i + 1`
done
echo " $TARGET_NAME">>$MAKEFILE_NAME
#Clean End

 

 

使用说明:

把一个项目的c++源代码放在一个目录里,拷贝上述脚本到一个sh文件(比如make.sh)中,通过chmod 700 ./make.sh添加执行权限

运行make.sh    ./make.sh

就会发现当前目录下生成了一个Makefile文件

然后make就可以编译程序了。

如果想要给最终可执行程序命名,只需要在运行脚本时,把名字作为参数给传进去就可以了。(比如./make.sh main.exe 然后make,就会生成一个main.exe的程序了)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值