MDK-SES提取SI文件列表
下载链接
简介
有些工程,可能包含了一大堆文件(比如 rt-thread 工程),你可能并不需要它们,但是却一直保留在你的工程目录中,想删掉又怕删错,一个个整理又太麻烦。
还有就是,当你使用 SI(source insight) 看源代码时,因为你不知道哪些文件才是你当前文件需要的,所以只能一股脑把所有的源文件添加到工程里面了。
然后你会发现,一个 main 函数有多处定义了,你都不知道哪个文件的 main 函数才是正主(在看 linux 源代码时亦是如此,根本不知道哪些文件被编译进内核了)。并且 SI 同步时间也大大延长了,本来几秒钟就能完成同步的,可能就需要十几秒,几十秒。
GUI 实现
- 可以精准获取MDK工程编译后的所有源文件
- 可以精准获取SES(segger embeded studio)工程编译后的所有源文件
使用方法
-
确认当前工程是MDK工程还是SES工程
-
选择工程编译后的*.d文件的路径
-
执行保存提取到的文件列表路径(指定文件名功能不需要关心)
-
点击提交后,会在指定的路径下,自动生成source insight文件列表
-
创建source insight工程,导入上面的文件列表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMSXKYHf-1635995626670)(https://gitee.com/chenyingchun0312/article-images/raw/master/Typora02/202111041111409.gif)]
实现原理
精准提取MDK工程中的所有源文件和头文件
- 在编译后的文件目录中(存在*.d)打开git bash
- 输入命令
cat *.d | awk -F ' ' '{print $2}' | awk '!a[$0]++' > sourceinsight_files.txt
cat *.d
表示获取所有的*.d文件内容awk -F ' ' '{print $2}'
表示获取.d文件中的以空格为分割的第二列awk '!a[$0]++'
表示将结果中,向同行去重
- 在MDK工程所在目录创建SI工程,然后导入sourceinsight_files.txt
精准提取SES工程中的而所有源文件和头文件
将如下脚本放到test.sh文件中,并将test.sh放到.d文件所在目录,然后执行source test.sh, 最后会生成Sourceinsight.txt文件,即为si创建工程时所需要添加的文件
cat *.d | grep -v "Output" > cat_all_d.txt # 打开所有*.d文件,排除Output一行(这行是.0文件)
sed -i 's/^[ \t]*//g' cat_all_d.txt # 删除行首空格
sed -i 's/ \\//g' cat_all_d.txt # 替换所有的'空格+\n'为空
sed -i 's/.h /.h \n/g' cat_all_d.txt # 替换所有的'.h空格' 为 '.h空格+换行'
cat cat_all_d.txt | awk '!a[$0]++' > Sourceinsight.txt # 将cat_all_d.txt中所有的重复行去除
参考文件:https://blog.csdn.net/DP29syM41zyGndVF/article/details/118740542