⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 build.js

📁 自动化编译工具代码
💻 JS
📖 第 1 页 / 共 2 页
字号:
//每日编译脚本
//创建日期: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 + -