自动生成makefile的脚本
2024-08-24 15:46:32
如果需要测试某一个特性,写了一个test.cpp
某天又增加了一个utils.cpp,依此类推,测试文件越来越多
每次测试时都要手动维护一个makefile实在是不明智的
于是萌生了用脚本自动维护的念头
很简单的一个脚本,运行脚本生成脚本当前目录的makefile
很适合用来测试简单的特性,生成的makefile很简单,没有多余的依赖关系
sedcmd文件包含了生成.d文件依赖的命令,因为有一堆的$符号需要转义
因此将命令单独放在一个文件里
bash文件genmake.sh代码如下:
#!/bin/bash mkfile=makefile
files=$(ls *.cpp)
OBJS= for file in $files; do
obj=${file%*.cpp}.o
OBJS+=$obj
OBJS+=" "
done echo "INCLUDES= -I." > $mkfile
echo "CFLAGS= -O2 -Wall" >> $mkfile
echo "CPPFLAGS= -D_DEBUG" >> $mkfile
echo "CXX=g++" >> $mkfile
echo "" >> $mkfile echo "OBJS=$OBJS" >> $mkfile
echo "all:test" >> $mkfile
echo "" >> $mkfile echo "include \$(OBJS:.o=.d)" >> $mkfile
echo "" >> $mkfile echo "test:\$(OBJS)" >> $mkfile
echo -e "\t\$(CXX) \$(CFLAGS) \$(OBJS) -o \$@" >> $mkfile
echo "" >> $mkfile echo "%.o:%.cpp" >> $mkfile
echo -e "\t\$(CXX) \$(CPPFLAGS) \$(INCLUDES) -c \$< -o \$@" >> $mkfile
echo "" >> $mkfile echo "%.d:%.cpp" >> $mkfile
dfilecmd=$(cat sedcmd)
echo -e "\t$dfilecmd" >> $mkfile
echo "" >> $mkfile echo "" >> $mkfile
echo ".PHONY:clean" >> $mkfile
echo "clean:" >> $mkfile
echo -e "\trm -rf *.o *.d test" >> $mkfile
echo "" >> $mkfile
sedcmd文件的内容
@set -e;rm -f $@;\
$(CXX) -MM $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
脚本只处理的cpp文件,其它语言同理。
最新文章
- html5 canvas常用api总结(三)--图像变换API
- Windows进程崩溃问题定位方法
- 理解Java Integer的缓存策略
- AutoLayout自动布局
- python Scrapy安装和介绍
- D3.js 其他选择元素方法
- c#中的类型转换
- Asp.net Web.Config - 配置元素customErrors
- JavaScript 使用闭包防止变量污染
- Nginx 负载配置
- UVA120-Stacks of Flapjacks(思维)
- Quartz定时器中Cron时间控制表达式写法
- Linux之ls
- java的关键字与保留字
- 从零开始一起学习SLAM | 为什么要用齐次坐标?
- verilog之inout
- 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合
- 【python】理想论坛帖子爬虫1.06
- 在jsp页面比较时间的大小
- 【Python】Python中的引用和赋值
热门文章
- android_handler(三)
- 【转】iOS应用崩溃日志揭秘2
- Base64工具类
- [iOS 开发] Xcode常见报错及解决办法
- 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
- X86(32位)与X64(64位)有什么区别,如何选择对应的操作系统和应用程序?
- ASP.NET MVC ajax提交 防止CSRF攻击
- Jquery 限制文本框输入字数【转】
- 自己做的demo--左连接
- java 基本知识点学习