📄 build.js
字号:
//每日编译脚本
//创建日期:2006年3月29日
//读当前js文件所在目录,设为工作目录
function GetBaseDirectory()
{
var fullname = WScript.ScriptFullName;
var shorname = WScript.ScriptName;
var index = fullname.indexOf(shorname);
if(index >=0)
{
return fullname.substring(0,index-1);
}
}
//从注册表中读取VS2005的安装目录
function GetVS2005Directory()
{
var shell = WScript.CreateObject("WScript.Shell");
var strdir = shell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\InstallDir");
return strdir;
}
//全局变量初始化
var gstrBaseDirectory = GetBaseDirectory();
var gstrLogFileName = "log.txt";
var gstrVSSINI = "G:\\VSS Database\\srcsafe.ini";
var gstrVSSUsername = "build";
var gstrVSSPassword = "12345";
var gstrVSSRemoteDirectory = "$/Source";
var gstrVS2005EXEDirectory = GetVS2005Directory()+"devenv.com";
var gstrOxygenEXEDirectory = "F:\\Program Files\\doxygen\\bin\\doxygen.exe";
var gstrOxygenCFGFilename = "Doxygen.cfg";
var gstrProgrameOutputDirectory = "\\bin";
var gstrDocumentOutputDirectory = "\\doc";
var gstrInstallOutputDirectory = "\\ins";
var gstrSrcOutputDirectory = "\\src";
var gstrRequiredFilesDirectory = gstrBaseDirectory+"\\RequriedFile";
var gstrInsPrjDirectory = gstrBaseDirectory+"\\installprj";
var gstrInsPrjVSSRemoteDirectory = "$/InstallPrj/SursenReaderSetup/SursenReaderSetup";
var gstrCompressExePath = gstrBaseDirectory+"\\ASPack212\\ASPACK.EXE";
var gstrInstallShieldExePath = "F:\\Program Files\\Macrovision\\IS11.5\\System\\iscmdbld.exe";
var gstrErrorMsg;
function SetError(msg)
{
gstrErrorMsg = msg;
}
function GetError()
{
return gstrErrorMsg;
}
//获取当前日期
function GetDate() {
var cal = new Date();
var month = cal.getMonth()+1;
var day = cal.getDate();
var strmonth = new String(month);
var strday = new String(day);
if ( strmonth.length == 1)
strmonth = "0"+month;
if ( strday.length == 1)
strday = "0"+day;
return cal.getFullYear()+"-"+strmonth+"-"+strday;
}
//建立全局文件操作对象
var fso;
fso = WScript.CreateObject("Scripting.FileSystemObject");
//build目录的名字
var gstrBuildDirectory = gstrBaseDirectory+"\\"+GetDate();
//如果目录已经存在,则删除
if (fso.FolderExists(gstrBuildDirectory))
{
fso.DeleteFolder(gstrBuildDirectory,true);
}
if (fso.FolderExists(gstrInsPrjDirectory))
{
//fso.DeleteFolder(gstrInsPrjDirectory,true);
}
//建立build目录
var gobjBuildDirector;
gobjBuildDirector = fso.CreateFolder(gstrBuildDirectory);
//fso.CreateFolder(gstrInsPrjDirectory);
fso.CreateFolder(gstrBuildDirectory+gstrProgrameOutputDirectory);
fso.CreateFolder(gstrBuildDirectory+gstrDocumentOutputDirectory);
fso.CreateFolder(gstrBuildDirectory+gstrInstallOutputDirectory);
fso.CreateFolder(gstrBuildDirectory+gstrSrcOutputDirectory);
var gstrSRCDir = gstrBuildDirectory+gstrSrcOutputDirectory;
//建立日志文件
var logfile;
logfile = fso.CreateTextFile(gstrBuildDirectory+"\\"+gstrLogFileName, true);
logfile.WriteLine("每日编译日志文件 "+GetDate());
logfile.WriteLine("==================================================================");
function WriteLog(msg)
{
var tmpdate = new Date();
logfile.WriteLine(tmpdate.toLocaleTimeString()+" "+msg);
//WScript.StdOut.Write(tmpdate.toLocaleTimeString()+" "+msg);
}
WriteLog("开始");
//最后的释放操作
function End()
{
//关闭日志文件
logfile.Close();
WScript.Quit(1);
}
//连接到VSS
var vssdb;
try
{
vssdb = WScript.CreateObject("SourceSafe");
vssdb.open(gstrVSSINI,gstrVSSUsername,gstrVSSPassword);
var vssitem = vssdb.VSSItem(gstrVSSRemoteDirectory, false);
//WScript.Echo(vssitem.Spec+" "+vssitem.Name+" "+vssitem.LocalSpec);
vssitem.LocalSpec = gstrSRCDir;
vssitem.Get("",8192);
WriteLog("获取最新版本成功");
}
catch(e)
{
SetError(e.description);
WriteLog("访问VSS时发生错误:"+GetError());
End();
}
//找RC文件,版本号自动增加
function AutoVersion(folder)
{
var subfolders,subfolder;
subfolders = new Enumerator(folder.SubFolders);
for (; !subfolders.atEnd(); subfolders.moveNext())
{
subfolder = subfolders.item();
AutoVersion(subfolder);
}
var files,file;
files = new Enumerator(folder.files);
for (; !files.atEnd(); files.moveNext())
{
file = files.item();
var tmp = new String(file.Name);
tmp = tmp.toLowerCase();
if(tmp.indexOf(".rc") > 0)
{
//checkout rc文件,修改版本号,然后checkin
try
{
var filepath = new String(file.Path);
filepath = filepath.toLowerCase();
//var tmp = new String(gstrBuildDirectory);
var index = filepath.indexOf(gstrSRCDir.toLowerCase());
if(index<0)
{
return;
}
filepath = filepath.substr(gstrSRCDir.length,filepath.length-gstrSRCDir.length);
var remotepath = gstrVSSRemoteDirectory + filepath;
var vssitem = vssdb.VSSItem(remotepath, false);
if(vssitem.IsCheckedOut == 0) //没有被checkout
{
vssitem.Checkout(GetDate()+"每日编译","",0);
}
else if(vssitem.IsCheckedOut == 1) //被其他用户checkout
{
var checkoutusers = "";
var er = new Enumerator(vssitem.Checkouts);
var item;
for (;!er.atEnd();er.moveNext())
{
item = er.item();
checkoutusers = " "+ checkoutusers + item.Username;
}
WriteLog(" 版本更新失败: "+remotepath+"已经被下列用户Checkout:"+checkoutusers);
return;
//throw new Error(0,gstrVSSRemoteDirectory+"\\P1\\Plugins.rc文件已经被下列用户Checkout:"+checkoutusers);
}
var shell = WScript.CreateObject("WScript.Shell");
if (fso.FileExists(gstrBaseDirectory+"\\AutoVersion.exe")==true)
{
shell.Run(gstrBaseDirectory+"\\AutoVersion.exe "+file.Path,0,true);
WriteLog(" 更新版本成功");
}
else
{
WriteLog(" 没有在"+gstrBaseDirectory+"\\目录下找到AutoVersion.exe文件");
}
vssitem.Checkin();
}
catch(e)
{
SetError(e.description);
WriteLog(" 修改版本号时发生错误:"+GetError());
}
return;
}
}
}
//copy编译好的文件到输出目录下
function copytobinoutput(folder)
{
var subfolders,subfolder;
subfolders = new Enumerator(folder.SubFolders);
for (; !subfolders.atEnd(); subfolders.moveNext())
{
subfolder = subfolders.item();
copytobinoutput(subfolder);
}
var files,file;
files = new Enumerator(folder.files);
for (; !files.atEnd(); files.moveNext())
{
file = files.item();
var tmp = new String(file.Name);
tmp = tmp.toLowerCase();
if(tmp.indexOf(".exe") > 0 || tmp.indexOf(".dll") > 0 || tmp.indexOf(".ocx") > 0)
{
fso.CopyFile(file.Path,gstrBuildDirectory+gstrProgrameOutputDirectory+"\\");
}
}
return;
}
//编译sln
function compile(folder,slnfilename)
{
var shell = WScript.CreateObject("WScript.Shell");
if (fso.FileExists(gstrVS2005EXEDirectory)==true)
{
var suc = shell.Run("\""+gstrVS2005EXEDirectory+"\" "+slnfilename+" /Rebuild Release /Out "+folder.Path+"\\buildlog.txt",0,true);
if(suc == 0)
{
WriteLog(" 编译成功完成");
//copytobinoutput(folder);
}
else
{
WriteLog(" &&&&&&&&&&&&&&&&编译出现错误$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
try{
var ff;
ff = fso.OpenTextFile(folder.Path+"\\buildlog.txt", 1, false);
WriteLog("----------------------------------------------------------------------------------------------");
WriteLog(ff.ReadAll());
WriteLog("----------------------------------------------------------------------------------------------");
ff.Close();
}
catch(e)
{
}
}
}
else
{
WriteLog(" 没有找到"+gstrVS2005EXEDirectory);
}
}
function compilesln(folder,slnfilename)
{
WriteLog("开始编译"+slnfilename);
AutoVersion(folder);
compile(folder,slnfilename);
WriteLog("完成编译"+slnfilename);
}
//遍历编译目录,寻找每个sln
function findsln(folder)
{
var subfolders;
subfolders = new Enumerator(folder.SubFolders);
for (; !subfolders.atEnd(); subfolders.moveNext())
{
var subfolder = subfolders.item();
findsln(subfolder);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -