`
dato0123
  • 浏览: 914814 次
文章分类
社区版块
存档分类
最新评论

setenv_base.cmd文件的修正

 
阅读更多

//=====================================================================
//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

该语句的意思是,如果有两侧有"的话,会自动除去;如果不存在,则维持原有的字符串。

分享到:
评论

相关推荐

    pro_apache_third_edition..pdf

    Contents About the Author...............................................................................................xix About the Technical Reviewer and Contributing Author.................xxi ...

    thl_r16_tinav2.0_hm1375验证通过_增加打印设备ID_20170824_1447.7z

    全志R16平台的tinav2.0系统下调通HM1375 2017/8/24 14:04 开发板:SC3817R OS:tina V2.0 1、最新的驱动程序请直接联系...int fetch_sub_cmd(const char* buf,int buf_len,char** cmd,int* cmd_num,int lenght) { ...

    C标准库源代码(学习C/C++必备)

    下载文件列表 Pack : clibsource.rar C 标准库源代码\ABORT.C C标准库源代码\ABS.C C标准库源代码\ACCESS.C C标准库源代码\ADJUSTFD.C C标准库源代码\ALGRITHM C标准库源代码\ASCTIME.C C标准库源代码\ASSERT.C C...

    hm1375_parrotv1.1验证通过_20170824_1528.7z

    全志R16的parrotv1.1的系统调通摄像头hm1375 2017/8/24 14:04 版本:V1.1 开发板:SC3817R OS:parrotv1.1(Android4.4.2) 1、 R:\wyb\hm1375_parrotv1.1\android\device\softwinner\astar-evb30\configs\camera....

    linux_libmad_mp3.tar

    在此狂贬那群网上转帖不看帖的人,没有一个关于完善libmad实现播放器的真正代码。本人上传的代码虽然粗糙,不过除了...运行前在终端source setenv.sh,已留下与其他进程通信的管道,会用的人就不说了,不会的千万别喷。

    Oracle 补丁p3948480_9206_SOLARIS64.zip的安装步骤

    解压文件包 %unzip p3948480_9206_SOLARIS64.zip %cd Disk1 停掉数据库 sql>shutdown immediate 启动安装程序 %./runInstaller 执行catpatch.sql脚本 %sqlplus /nolog SQL>conn / as sysdba SQL> SPOOL patch.log ...

    迷你壳

    迷你壳关于指示您必须编写一个小型UNIX命令解释器。... cmd_cd.c│ ├── cmd_clear.c│ ├── cmd_echo.c│ ├── cmd_env.c│ ├── cmd_eval.c│ ├── cmd_exit.c│ ├── cmd_help.c│ 

    imx6ull移植uboot(三)其他修改

    uboot 启动会打印有“ Board: MX6ULL 14×14 EVK”这一句,将此信息该位自己开发板名称,打开mx6ull_fire_emmc.c文件,搜索checkboard找到如下: 将”MX6ULL 14×14 EVK”该位自己开发板的名字即MX6ULL FIRE EMMC,...

    datan:达坦(Datan)是一个对法国国会议员的投票行为有影响的网站

    将.htaccess.dist复制到.htaccess填写SetEnv变量(替换username_example和password_example) 巴黎圣母堂 基础结构表的进口商:-departement.sql -circos.sql -cities_infos.sql -regions_old_new.sql -insee.sql -...

    cpp-libco是微信后台大规模使用的cc协程库

    libco是微信后台大规模使用的c/c 协程库,2013年至今稳定运行在微信后台的数万台机器上。

    catmap:催化剂微动力学分析软件包,用于自动创建用于催化剂筛选的微动力学模型

    通过附加路径要使用该软件包,请将该目录添加到PYTHONPATH中,例如在bash shell中: export PYTHONPATH=$HOME/THIS_FOLDER_PATH:$PYTHONPATH或在cshell中: setenv PYTHONPATH $HOME/THIS_FOLDER_PATH:$PYTHONPATH您...

    rtl8189es_r16m验证通过20170818_1659没有外层目录.7z

    $(call inherit-product, build/target/product/full_base.mk) $(call inherit-product, device/softwinner/astar-common/astar-common.mk) $(call inherit-product-if-exists, device/softwinner/astar-evb30/...

    !!!!rtl8189es_r16m验证通过20170818_1659没有外层目录.zip

    $(call inherit-product, build/target/product/full_base.mk) $(call inherit-product, device/softwinner/astar-common/astar-common.mk) $(call inherit-product-if-exists, device/softwinner/astar-evb30/...

    华为AP3010_胖_瘦固件及刷机命令

    4.setenv serverip 192.168.10.12(本机地址与其相同) 5.update boot u-boot.bin(此时TFTP服务器中根目录为G:\df\AP升级\1) 出现###表示成功; 6.reset 7.根据提示在3秒内按f; 8.密码是admin@huawei.com 9....

    ModSecurity Reference Manual

    Table of Contents Introduction .............................................................................................................................8 ...Real-Time Monitoring and Attack Detection ...

    Hi3518_SDK中文资料

    在"Hi3518_V100R001SPC***/01.software/board"目录下,您可以看到一个 Hi3518_SDK_Vx.x.x.x.tgz 的文件,该文件就是Hi3518的软件开发包。 其中,Hi3518_V100R001SPC01xxx对应的是uclib版本,Hi3518_V100R001SPC02...

    hm1375_tinav2.1验证通过_增加设备ID的读取显示_20170825_1333没有外层目录.7z

    2017/8/24 14:04 R:\wyb\thl_r16_tinav2.0_hm1375\lichee\linux-3.4\drivers\media\video\...int fetch_sub_cmd(const char* buf,int buf_len,char** cmd,int* cmd_num,int lenght) { int i = 0,j = 0,n = 0; ...

    drools setenv.bat配置

    kie.server 链接不上上,-Dorg.kie.server.id=kie-server 中主要kie-server跟新消息一直

    OpenDDS-3.27.tar.gz

    Build Directions: ./configure To enable Java bindings, use ./...source setenv.sh For the C++ example:cd DevGuideExamples/DCPS/Messenger For the Java example:cd java/tests/messenger ./run_test.pl ...

    setenv.sh for tomcat

    NULL 博文链接:https://mazilaidaige.iteye.com/blog/2400955

Global site tag (gtag.js) - Google Analytics