如果需要测试某一个特性,写了一个test.cpp
某天又增加了一个utils.cpp,依此类推,测试文件越来越多
每次测试时都要手动维护一个makefile实在是不明智的
于是萌生了用脚本自动维护的念头
很简单的一个脚本,运行脚本生成脚本当前目录的makefile
很适合用来测试简单的特性,生成的makefile很简单,没有多余的依赖关系
sedcmd文件包含了生成.d文件依赖的命令,因为有一堆的$符号需要转义
因此将命令单独放在一个文件里
bash文件genmake.sh代码如下:
1 #!/bin/bash
2
3 # 获取脚本程序的绝对路径
4 sh=$0
5
6 # 查找所有c++文件
7 cppsource=$(find ./ -name *.cpp -type f -exec basename {} \;)
8 chrlen=${#cppsource}
9 if [ $chrlen -eq 0 ]; then # 如果没有找到可用的c++文件,直接退出程序
10 echo "found no c++ file"
11 exit
12 fi
13
14 mkfile="Makefile"
15 sedtemp="${sh%/*.sh}/sedcmd" # 构建sed命令的模板文件绝对路径,该文件与脚本程序处以同一目录
16 OBJS=
17
18 rm -f $mkfile
19
20 # 根据c++文件名构建队名的obj文件列表
21 for file in $cppsource; do
22 obj=${file%*.cpp}.o
23 OBJS+=$obj
24 OBJS+=" "
25 done
26
27 # 定义编译器编译所需的参数
28 echo "INCLUDES= -I." > $mkfile
29 echo "CFLAGS= -O2 -Wall" >> $mkfile
30 echo "CPPFLAGS= -D_DEBUG" >> $mkfile
31 echo "CXX=g++ -std=c++11" >> $mkfile
32 echo "" >> $mkfile
33
34 echo "OBJS=$OBJS" >> $mkfile
35 echo "all:test" >> $mkfile
36 echo "" >> $mkfile
37
38 echo "include \$(OBJS:.o=.d)" >> $mkfile
39 echo "" >> $mkfile
40
41 echo "test:\$(OBJS)" >> $mkfile
42 echo -e "\t\$(CXX) \$(CFLAGS) \$(OBJS) -o \$@" >> $mkfile
43 echo "" >> $mkfile
44
45 # Makefile的模糊匹配依赖
46 echo "%.o:%.cpp" >> $mkfile
47 echo -e "\t\$(CXX) \$(CPPFLAGS) \$(INCLUDES) -c \$< -o \$@" >> $mkfile
48 echo "" >> $mkfile
49
50 # 使用sed命令模板构建Makefile的d文件依赖规则
51 echo "%.d:%.cpp" >> $mkfile
52 dfilecmd=$(cat $sedtemp)
53 echo -e "\t$dfilecmd" >> $mkfile
54 echo "" >> $mkfile
55
56 echo "" >> $mkfile
57 echo ".PHONY:clean" >> $mkfile
58 echo "clean:" >> $mkfile
59 echo -e "\trm -rf *.o *.d test" >> $mkfile
60 echo "" >> $mkfile
sedcmd文件的内容
1 @set -e;rm -f $@;\
2 $(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
3 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
4 rm -f $@.$$$$
脚本只处理的cpp文件,
c语言文件可以使用同样的方法操作
如果需要同时处理cpp和c文件,
则需要将Makefile的模糊匹配依赖
替换为使用for循环为每个源文件和obj文件单独匹配规则
原文链接: https://www.cnblogs.com/jojodru/p/4673127.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/219577
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!