讓SlickEdit 自動編譯Keil C51工程
吳宏偉 2012-2-10
上一篇文章已經講了如何手動調用Keil的C51編譯器來編譯我們的工程,今天跟大家說說如何在SlickEdit環境下配置編譯命令。
-
首先新建一個SlickEdit工程
假設工程路徑為"D:\51",在Build System界面下選擇第二個選項,
配置 Build 命令的 Command Line為D:\51\automake.cmd,此文件內容下面將貼出來。
這樣便完成了配置過程。其實最核心的地方就在automake.cmd文件,下面將對此文件的關鍵內容做一些講解。
-
關鍵內容講解
(1)變量聲明:SET PROJECT=D:\51 聲明PROJECT變量的值為D:\51,之后需要引用此變量時,需用%PROJECT%。
(2) 變量值替換,格式為,%VAR:oldstr=newstr%, VAR為變量名,oldstr將替換成newstr;
例:SET OUTPUT=D:\51\51.hex,則%OUTPUT:.hex=% 將為 D:\51\51,即把.hex替換成空字符串。
(3)文件枚舉,格式為:for /r "PATH" %%i in (*.c) do (….)
/r表示搜索子目錄,"PATH"為所要搜索的文件,*.c為所要搜索的類型。 Do 后面填寫所要執行的操作。
(4)for循環內的變量多次賦值:
在for語句里面重復對同一變量多次賦值時才需要使用"!",並且在使用"!"調用變量時,要首先"啟用延遲環境變量擴充",啟動命令為:SetLocal EnableDelayedExpansion。另外需要說明的是,"啟用延遲環境變量擴充"后,所有的"!"都將被視為"取變量值"的特殊符號,即使用"^!"也不能輸出符號"!"。若要輸出"!",則需要"停用延遲環境變量擴充",命令為:SetLocal DisableDelayedExpansion。
-
使用此文件來編譯工程有以下幾點需要注意:
-
工程路徑包括文件名中不能含有空格;
-
所要編譯的文件只能是同一類型的文件,如都是C文件,或者都是ASM文件;
-
-
Automake.cmd文件的內容如下:
@echo off
@rem 本批處理可自動編譯PROJECT目錄下(包括子目錄)下的.C文件,並生成OUTPUT文件
@rem 本文件由HomeWay編寫,潮風工作室, 2012/2/10
@rem 環境變量定義
@rem 請根據本機情況修改以下變量
PATH=D:\KEIL4\C51\BIN;%PATH%
SET C51INC=D:\KEIL4\C51\INC
SET C51LIB=D:\KEIL4\C51\LIB
@rem 工程所在目錄
SET PROJECT=D:\51
@rem 輸出文件
SET OUTPUT=D:\51\51.hex
@rem 枚舉所有.C文件並編譯
set OBJ=
SetLocal EnableDelayedExpansion
for /r "%PROJECT%" %%i in (*.c) do (
set OBJ=!OBJ!%%i,
%rem compile the project files
C51 %%i
IF ERRORLEVEL 2 GOTO :FAILED
IF ERRORLEVEL 3 GOTO :FAILED
)
%rem 鏈接所有OBJECT文件
echo LINK:%OBJ:.c=.obj%%C51LIB%\C51S.lib
BL51 %OBJ:.c=.obj%%C51LIB%\C51S.lib TO %OUTPUT:.hex=% RAMSIZE(256)
IF ERRORLEVEL 2 GOTO :FAILED
IF ERRORLEVEL 3 GOTO :FAILED
%rem 生成HEX文件
OH51 %OUTPUT:.hex=% HEXFILE(%OUTPUT%)
goto :SUCCESS
:FAILED
echo 編譯失敗!
exit 1
:SUCCESS
%rem 清除所有的臨時文件
del %OUTPUT:.hex=%
for /r "%PROJECT%" %%i in (*.obj) do del %%i
for /r "%PROJECT%" %%i in (*.lst) do del %%i
for /r "%PROJECT%" %%i in (*.m51) do del %%i
echo 編譯成功!輸出文件為:%OUTPUT%
exit 0