送给用 EditPlus 等编辑器写代码的朋友们!
程序代码:
/* * DocumentName: CompileAndLinker.js * CreateDate: 2009-9-11 * Author: BlueMouse, [Lin], [Weipengyuan], [阿远] * Note: 编译和连接和运行C或CPP代码 * CallFormat: CompileAndLinker.js "编译程序的路径", "连接程序的路径", "源文件所在的目录", "编译和连接后输出的目录", "连接后生成的可执行文件名", "连接开关", "头文件目录表", "库文件目录表" * CallExample: cscript.exe CompileAndLinker.js "D:\Dev-Cpp\Bin\g++.exe" "D:\Dev-Cpp\Bin\g++.exe" "E:\Programs\Example" "E:\Programs\Example\Output" "MyProgram" "-mwindows" "D:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include|D:/Dev-Cpp/include/c++/3.4.2/backward|D:/Dev-Cpp/include/c++/3.4.2/mingw32|D:/Dev-Cpp/include/c++/3.4.2|D:/Dev-Cpp/include" "D:/Dev-Cpp/lib" */ var oWsh = new ActiveXObject("WScript.Shell"); var oFso = new ActiveXObject("Scripting.FileSystemObject"); var aArgs = new Array(); var aSFiles = new Array(); var aOFiles = new Array(); var sTemp = new String(""); var check = 0; var nIndex = 0; var nJndex = 0; var Re; var oFile, oFolder, oFiles, oCP, oLP; var aHeaders, aLibrars; //---------------------------------------------------------------------------------------------------------- // 检查参数合法性 //---------------------------------------------------------------------------------------------------------- if(WScript.Arguments.length==8) { try { sTemp = WScript.Arguments(0); oFile = oFso.GetFile(sTemp); oFile = null; check++; aArgs["CompileBinPath"] = sTemp; sTemp = WScript.Arguments(1); oFile = oFso.GetFile(sTemp); oFile = null; check++; aArgs["LinkerBinPath"] = sTemp; sTemp = WScript.Arguments(2); oFolder = oFso.GetFolder(sTemp); sTemp = oFolder.Path + "\\"; oFolder = null; check++; aArgs["SocureDir"] = sTemp; sTemp = WScript.Arguments(3); oFolder = oFso.GetFolder(sTemp); sTemp = oFolder.Path + "\\"; oFolder = null; check++; aArgs["OutputDir"] = sTemp; try { sTemp = WScript.Arguments(4); if(sTemp.length<=0) { throw "您所提供的目标程序文件名参数不正确,请提供正确的参数!"; } else { Re = /\./; if(sTemp.search(Re)<0) { sTemp += ".exe"; } aArgs["ExecFileName"] = sTemp; check++; } sTemp = WScript.Arguments(5); if(sTemp.length<=0) { throw "您所提供的库参数不正确,请提供正确的参数!"; } else { aArgs["LinkerSwitch"] = sTemp; check++; } } catch(ErrInfo) { WScript.Echo(ErrInfo); } sTemp = WScript.Arguments(6); aHeaders = sTemp.split("|"); if(aHeaders.length>0) { for(nIndex=0;nIndex<aHeaders.length;nIndex++) { oFolder = oFso.GetFolder(aHeaders[nIndex]); oFolder = null; } } else { oFolder = oFso.GetFolder(sTemp); oFolder = null; aHeaders = new Array(); aHeaders[0] = sTemp; } check++; sTemp = WScript.Arguments(7); aLibrars = sTemp.split("|"); if(aLibrars.length>0) { for(nIndex=0;nIndex<aLibrars.length;nIndex++) { oFolder = oFso.GetFolder(aLibrars[nIndex]); oFolder = null; } } else { oFolder = oFso.GetFolder(sTemp); oFolder = null; aLibrars = new Array(); aLibrars[0] = sTemp; } check++; } catch(ErrObj) { if(ErrObj.number==-2146828235) { if(check==0) { WScript.Echo("您所提供的编译程序路径 [ " + sTemp + " ] 不正确!,请提供正确的参数!"); } else if(check==1) { WScript.Echo("您所提供的连接程序路径 [ " + sTemp + " ] 不正确!,请提供正确的参数!"); } } else if(ErrObj.number==-2146828212) { if(check==2) { WScript.Echo("您所提供的源文件所目录 [ " + sTemp + " ] 不正确!,请提供正确的参数!"); } else if(check==3) { WScript.Echo("您所提供的输出目录 [ " + sTemp + " ] 不正确!,请提供正确的参数!"); } else if(check==6) { WScript.Echo("您所提供的头文件目录表不正确!,请提供正确的目录!"); } else if(check==7) { WScript.Echo("您所提供的库文件目录表不正确!,请提供正确的目录!"); } } else { WScript.Echo("编译脚本在检测参数合法性时遇到不明的错误 [ " + ErrObj.number + " ],脚本将停止执行!"); } } if(check==8) { //------------------------------------------------ // 取得需要编译的源文件并生成其对应的编译目标文件名 //------------------------------------------------ oFolder = oFso.GetFolder(aArgs["SocureDir"]); oFiles = new Enumerator(oFolder.files); nIndex = 0; for(;!oFiles.atEnd();oFiles.moveNext()) { sTemp = oFiles.item().Path; if((sTemp.substr(sTemp.length-4,1)=="."&&sTemp.substr(sTemp.length-3,3)=="cpp")||(sTemp.substr(sTemp.length-2,1)=="."&&sTemp.substr(sTemp.length-1,1)=="c")) { aSFiles[nIndex] = sTemp; Re = /\./; sTemp = oFiles.item().Name; nCheck = sTemp.search(Re); aOFiles[nIndex] = aArgs["OutputDir"] + sTemp.substr(0,nCheck+1)+"o"; nIndex++; } } oFiles = null; oFolder = null; //------------------------------------------------ // 编译源文件 //------------------------------------------------ WScript.Echo("---------- Compile ----------\r"); check = 8; for(nIndex=0;nIndex<aSFiles.length;nIndex++) { sTemp = aArgs["CompileBinPath"]; sTemp += " -c \"" + aSFiles[nIndex] + "\""; sTemp += " -o \"" + aOFiles[nIndex] + "\""; for(nJndex=0;nJndex<aHeaders.length;nJndex++) { sTemp += " -I\"" + aHeaders[nJndex] + "\""; } oCP = oWsh.Exec(sTemp); sTemp = ""; while(oCP.status!=1) { if(!oCP.StdErr.AtEndOfStream) { sTemp += oCP.StdErr.Read(1); } } if(sTemp.length==0) { WScript.Echo(aSFiles[nIndex] + " Compilation successful!\r"); check++; } else { WScript.Echo(sTemp); } oCP = null; } //------------------------------------------------ // 连接目标文件 //------------------------------------------------ if(check==8+aSFiles.length) { WScript.Echo("\r---------- Linker ----------\r"); sTemp = ""; for(nIndex=0;nIndex<aOFiles.length;nIndex++) { sTemp += " \"" + aOFiles[nIndex] + "\""; } sTemp = aArgs["LinkerBinPath"] + " " + sTemp + " -o \"" + aArgs["OutputDir"] + aArgs["ExecFileName"] + "\""; for(nJndex=0;nJndex<aLibrars.length;nJndex++) { sTemp += " -L\"" + aLibrars[nJndex] + "\""; } sTemp += " " + aArgs["LinkerSwitch"]; oLP = oWsh.Exec(sTemp); sTemp = ""; while(oLP.status!=1) { if(!oLP.StdErr.AtEndOfStream) { sTemp += oLP.StdErr.Read(1); } } if(sTemp.length==0) { WScript.Echo(aArgs["OutputDir"] + aArgs["ExecFileName"] + " Createing successful!\r"); check++; } else { WScript.Echo(sTemp); } oLP = null; } } //------------------------------------------------ // 运行新生成的程序 //------------------------------------------------ if(check==8+1+aSFiles.length) { if(oWsh.Popup("代码已经成功编译及连接,是否要运行新生成的程序?",10,"运行程序",4|32)==6) { WScript.Echo("\r---------- Run ----------\r"); check = oWsh.Run("\"" + aArgs["OutputDir"] + aArgs["ExecFileName"] + "\"",5,true); WScript.Echo("RturenVal( " + check + " ) "); } } } else if(WScript.Arguments.length<8) { WScript.Echo("您提供的参数数量不够,脚本将停止执行!"); } else if(WScript.Arguments.length>8) { WScript.Echo("您提供的参数数量过多,脚本将停止执行!"); } // // 结束脚本执行 // oWsh = null; oFso = null; aArgs = null; WScript.Quit();
[[it] 本帖最后由 BlueMouse 于 2008-9-12 09:05 编辑 [/it]]