自动生成makefile的脚本

本文介绍了一种用于自动生成Makefile的简单bash脚本,该脚本能根据当前目录下的C++源文件自动生成Makefile文件,简化了构建过程。

如果需要测试某一个特性,写了一个test.cpp

某天又增加了一个utils.cpp,依此类推,测试文件越来越多

每次测试时都要手动维护一个makefile实在是不明智的

于是萌生了用脚本自动维护的念头

很简单的一个脚本,运行脚本生成脚本当前目录的makefile

很适合用来测试简单的特性,生成的makefile很简单,没有多余的依赖关系

sedcmd文件包含了生成.d文件依赖的命令,因为有一堆的$符号需要转义

因此将命令单独放在一个文件里

bash文件genmake.sh代码如下:

 1 #!/bin/bash
 2 
 3 mkfile=makefile
 4 files=$(ls *.cpp)
 5 OBJS=
 6 
 7 for file in $files; do
 8    obj=${file%*.cpp}.o
 9    OBJS+=$obj
10    OBJS+=" "
11 done
12 
13 echo "INCLUDES= -I." > $mkfile
14 echo "CFLAGS= -O2 -Wall" >> $mkfile
15 echo "CPPFLAGS= -D_DEBUG" >> $mkfile
16 echo "CXX=g++" >> $mkfile
17 echo "" >> $mkfile
18 
19 echo "OBJS=$OBJS" >> $mkfile
20 echo "all:test" >> $mkfile
21 echo "" >> $mkfile
22 
23 echo "include \$(OBJS:.o=.d)" >> $mkfile
24 echo "" >> $mkfile
25 
26 echo "test:\$(OBJS)" >> $mkfile
27 echo -e "\t\$(CXX) \$(CFLAGS) \$(OBJS) -o \$@" >> $mkfile
28 echo "" >> $mkfile
29 
30 echo "%.o:%.cpp" >> $mkfile
31 echo -e "\t\$(CXX) \$(CPPFLAGS) \$(INCLUDES) -c \$< -o \$@" >> $mkfile
32 echo "" >> $mkfile
33 
34 echo "%.d:%.cpp" >> $mkfile
35 dfilecmd=$(cat sedcmd)
36 echo -e "\t$dfilecmd" >> $mkfile
37 echo "" >> $mkfile
38 
39 echo "" >> $mkfile
40 echo ".PHONY:clean" >> $mkfile
41 echo "clean:" >> $mkfile
42 echo -e "\trm -rf *.o *.d test" >> $mkfile
43 echo "" >> $mkfile

sedcmd文件的内容

1 @set -e;rm -f $@;\
2     $(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
3     sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
4     rm -f $@.$$$$

 

脚本只处理的cpp文件,其它语言同理。

转载于:https://www.cnblogs.com/jojodru/p/4673127.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值