在Keil和IAR的工程中,为了使文件结构清晰,通常会设置很多的子文件夹,然后将头文件和源文件放在不同的子文件夹中,这样就需要手动添加这些头文件夹的路径。当工程结构非常复杂时,文件夹的数量就非常多,特别是从别人那里拷贝过来的工程目录,添加头文件路径就变得非常的繁琐。所以我们需要一个自动化的方法。该方法会搜索工程目录的文件夹和子文件夹,将其中包含了.h文件的路径找出来,并转换成keil和IAR要求的格式。这个难不倒程序员,只是简单的文件查找,再用点正则就行,QT也好,python也好都很容易实现。但是考虑到keil和IAR的工程师不一定装python,打包也不方便,QT的程序也太大,所以选择了相对熟悉的powershell脚本。简单好用,Windows自带,不需要再额外安装或者下载什么。Simple is better than complex。
不多说,直接上脚本:
$incPath = dir -filter "*.h" -Recurse $txtList="","" foreach($fpath in $incPath) { $txtList+=$fpath.DirectoryName } $txtTemp=$txtList[0] $txtTemp #$KeilOut="","" $KeilOut="Keil include directories`n`n" $workDir=get-location $workDir =$workDir -replace "\","\" foreach($txt in $txtList) { if($txt -ne $txtTemp) { $txtTemp=$txt $txtTemp +=";" $KeilOut += $txtTemp -replace $workDir , "." $txtTemp=$txt } } $IAROut="","" $IAROut += "`nIAR include directories`n" $txtTemp=$txtList[0] foreach($txt in $txtList) { if($txt -ne $txtTemp) { $txtTemp=$txt $IAROut += $txtTemp -replace $workDir , "`$PROJ_DIR$" } } $KeilOut>incDir.txt $IAROut>>incDir.txt
看一下运行之后的结果:
Keil include directories
.ALGORITHM;.CORE;.FWLIBinc;.HARDWARECCD;.HARDWARELaser;.HARDWARELED;.HARDWAREMotorSpeed;.SYSTEMdelay;.SYSTEMsys;.SYSTEMusart;.UCOSIIconfig;.UCOSIIports;.UCOSIIsource;.UCOSIIucos_cpu;.USER;
IAR include directories
$PROJ_DIR$ALGORITHM
$PROJ_DIR$CORE
$PROJ_DIR$FWLIBinc
$PROJ_DIR$HARDWARECCD
$PROJ_DIR$HARDWARELaser
$PROJ_DIR$HARDWARELED
$PROJ_DIR$HARDWAREMotorSpeed
$PROJ_DIR$SYSTEMdelay
$PROJ_DIR$SYSTEMsys
$PROJ_DIR$SYSTEMusart
$PROJ_DIR$UCOSIIconfig
$PROJ_DIR$UCOSIIports
$PROJ_DIR$UCOSIIsource
$PROJ_DIR$UCOSIIucos_cpu
$PROJ_DIR$USER
讲解一下怎么使用这个脚本:
1,打开powershell。
有很多方式打开,我习惯WIN+R打开运行,然后输入powershell打开。
2,使用cd 命令切换到Keil或者IAR的工程目录
3,复制上面的脚本到powershell,按ENTER。然后工程目录下会有一个名字为 incDir.txt的文本文件,里面就是头文件路径。
4,将txt中内容复制粘贴到keil或者IAR中即可