setenv_base.cmd文件的修正
来源:互联网 发布:欢乐颂刘涛的服装淘宝 编辑:程序博客网 时间:2024/05/16 20:29
//=====================================================================
//TITLE:
// setenv_base.cmd文件的修正
//AUTHOR:
// norains
//DATE:
// Friday 17-September-2010
//Environment:
// NULL
//=====================================================================
Porting Kit下面有针对不同编译环境的命令文件,如果使用MDK的话,那么有setenv_MDK3.1.cmd和setenv_MDK3.80a.cmd这两个文件选择。文件名末尾的是相对应的MDK版本,那如果装的是MDK 4.0,没有setenv_MDK4.0.cmd,那应该怎么办呢?其实可以选择setenv_MDK3.80a.cmd来进行替代。原因很简单,我们先查看一下setenv_MDK3.80a.cmd文档。
该文档的内容很简单,主要的语句是:setenv_base.cmd MDK3.80a PORT %*。意义很清楚,仅仅是调用了另外一个文件setenv_base.cmd而已。那么,我们接下来就是看看这个setenv_base.cmd。仔细查看一下会发现,批处理文件首先无论是3.8还是3.1,都是设置相同的环境变量:
IF /I "%COMPILER_TOOL_VERSION%"=="MDK3.1" CALL :SET_MDK_VARS
IF /I "%COMPILER_TOOL_VERSION%"=="MDK3.80a" CALL :SET_MDK_VARS
唯一的区别只是这几行:
if "%COMPILER_TOOL_VERSION%"=="MDK3.1" (
set RVCT31BIN=%MDK_TOOL_PATH%/ARM/BIN31
) ELSE (
set RVCT31BIN=%MDK_TOOL_PATH%/ARM/BIN40
)
很明显看出来,3.1和3.8的最大区别只是在于工具所处的文件夹名不同,3.1的是BIN31,而3.8的是BIN40,恰好MDK 4.0的工具也是位于BIN40,这也就是为什么可以采用setenv_MDK3.80a.cmd这个bat文件来对MDK4.0来进行设置的原因。其实如果以后MDK的工具路径有变更,而微软又没有发布相应的bat文件,那么可以在此进行更改。
不过,这个setenv_base.cmd文件微软并没有编写得非常好,如果Porting Kit的安装目录有空格的话,比如:“D:/Program Files/Microsoft .NET Micro Framework/v4.1/Porting Kit”,那么批处理命令就会执行出错,提示如下:‘D:/Program’不是内部或外部命令,也不是可运行的程序或批处理命令。
截图如下所示:
这个问题是因为微软写批处理命令没有考虑到空格的缘故,要修正错误其实很简单,将第30行的这句:
CALL %~dp0/tools/scripts/init.cmd
两端加上双引号即可,即:
"CALL %~dp0/tools/scripts/init.cmd"
当然咯,这样加上去之后,会产生一个有趣的问题。比如port kiting装在D盘,正常来说,目录应该是:
D:/Program files/port kiting/tools/scripts/init.cmd
但按如上批处理的写法,目录会变成这样:
D:/Program files/port kiting//tools/scripts/init.cmd
仔细观察的话,在tools前面会多一个斜杠。不过,系统会自动将两个斜杠当成一个对待,所以还是能正常调用批处理文件。
如果想要完美,之前的那批处理语句应该变成:
"CALL %~dp0tools/scripts/init.cmd"
不过这样虽然是完美了,但%~dp0和tools却混杂在了一起,不利于人的观看。反正多一个斜杠对系统而言都是一样的,建议还是改成之前的写法,至少我们人看着舒坦,要操心的就让机器去操心吧。
说了那么多,那这个setenv_MDK3.80a.cmd应该怎么使用呢?叶帆的文章说直接在命令行输入setenv_MDK3.80a.cmd(见http://blog.csdn.net/yefanqiu/archive/2010/01/01/5117554.aspx的第4点),但这不一定符合我们系统的要求。因为直接点击的话,那么默认的路径为c:/keil/arm,如果要MDK的路径不是安装在这个目录,那么应该是这样调用,如:
setenv_MDK3.80a.cmd d:/ Keil/ARM
看起来很简单,那是因为路径没有空格。如果MDK的安装目录带有空格,那就很郁闷了,比如路径是D:/Program Files/Keil文件夹下,如果你是直接这么调用的话:
setenv_MDK3.80a.cmd d:/Program Files/Keil/ARM
那么很遗憾,系统会提示错误:
Error - Invalid argument. Usage: setenv.cmd MDK_TOOL_PATH
Example: setenv.cmd c:/Keil/ARM
其对应的截图如下所示:
那么,我们可不可以将路径用””来括起来呢?加入我们输入的指令更改如下:
setenv_MDK3.80a.cmd "d:/Program Files/Keil/ARM"
那么还是会有错,只不过提示错误变成:
‘D:/Program’不是内部或外部命令,也不是可运行的程序或批处理命令
除此以外,还有另外一个:
此时不应有 Files/Keil/ARM ""=""
其对应的截图如下所示:
这个错误产生的原因是因为windows将括号也当成形参传递给了批处理命令。但如果不用括号,因为有空格,所以windows又会认为它是两个形参。
解决方法很简单,我们看看setenv_base.cmd文件的第22行:
SET ARG3=%3
将它更改为:
SET ARG3=%~3
该语句的意思是,如果有两侧有"的话,会自动除去;如果不存在,则维持原有的字符串。
- setenv_base.cmd文件的修正
- 官方说明文件的修正
- CMD文件的原理 dsp cmd dsp cmd文件
- CMD文件的编写
- CMD文件的编写
- dsp 的 cmd文件
- CMD文件的原理
- pe_xscan 修正文件时间的一个bug
- 修正STM32F103ZE的散列文件
- 解压文件的Cmd指令
- DSP CMD文件的编写
- DSP的CMD文件讲解
- DSP2812的标准CMD文件
- DSP2812的CMD文件分析
- DSP2812的标准CMD文件
- DSP CMD文件的编写
- DSP2812的标准CMD文件
- DSP2812的标准CMD文件
- 查询3d信息(组3、组6、机球号)---存储过程的使用方法---
- 查询3d信息(组3、组6、机球号)---存储过程的使用方法---
- 各种开发工具技巧小结
- jetty request统计 StatisticsHandler
- SPI协议简介
- setenv_base.cmd文件的修正
- 多线程中不能访问静态 类型的
- SOA解决方案
- 关于S3C2440和CC2420的SPI通信(转载的问题博客)
- 段错误的第7种情况——指向静态存储区的指针
- C#的几种写文件方法
- svn恢复误删除目录
- Flex查看源代码的实现 Flex view source
- 求职简历——开始找工作了