Jscriptスクリプトを使用してVCエンジニアリング設定を一括変更
6821 ワード
作者:朱金燦
ソース:http://blog.csdn.net/clever101
サードパーティ製ライブラリをアップグレードする場合が多く、多くのプロジェクトに対して設定を変更する必要があります.VSでCtrlキーを押すと確かに複数のプロジェクトを選択できますが、これによって面倒な点もあります.1つは、すべてのプロジェクトを1つのソリューションに追加する必要があることです.2つは、Debug、Release、UnicodeDebug、UnicodeReleaseなどの複数のバージョンがあれば、操作も煩雑です.今私もちょうどこのような需要があって、私はgdalライブラリを1.9.1から1.10.0にアップグレードして、私はJscriptスクリプトを書いてVC工事の設定を修正することを決定しました.具体的には、含まれるヘッダファイルディレクトリにgdal_を1_9_1_vc 9/includeをgdalに置き換える1_10_vc 9/include、サードパーティライブラリパスgdal_1_9_1_vc 9/libをgdalに置き換える1_10_vc 9/lib、依存ライブラリgdal 19を追加i.libをgdal 110_に置き換えるi.lib,gdal19_i_D.libをgdal 110_に置き換えるi_D.lib.
VCエンジニアリングファイルは、実際にはxmlファイルであり、ヘッダファイルのパスプロパティ、サードパーティライブラリのパスプロパティ、および追加の依存ライブラリがtoolエントリの下で設定されています.したがって,VCエンジニアリングファイルを読み取り,対応する属性を変更するだけでよい.Jscriptスクリプトコードは次のとおりです.
ソース:http://blog.csdn.net/clever101
サードパーティ製ライブラリをアップグレードする場合が多く、多くのプロジェクトに対して設定を変更する必要があります.VSでCtrlキーを押すと確かに複数のプロジェクトを選択できますが、これによって面倒な点もあります.1つは、すべてのプロジェクトを1つのソリューションに追加する必要があることです.2つは、Debug、Release、UnicodeDebug、UnicodeReleaseなどの複数のバージョンがあれば、操作も煩雑です.今私もちょうどこのような需要があって、私はgdalライブラリを1.9.1から1.10.0にアップグレードして、私はJscriptスクリプトを書いてVC工事の設定を修正することを決定しました.具体的には、含まれるヘッダファイルディレクトリにgdal_を1_9_1_vc 9/includeをgdalに置き換える1_10_vc 9/include、サードパーティライブラリパスgdal_1_9_1_vc 9/libをgdalに置き換える1_10_vc 9/lib、依存ライブラリgdal 19を追加i.libをgdal 110_に置き換えるi.lib,gdal19_i_D.libをgdal 110_に置き換えるi_D.lib.
VCエンジニアリングファイルは、実際にはxmlファイルであり、ヘッダファイルのパスプロパティ、サードパーティライブラリのパスプロパティ、および追加の依存ライブラリがtoolエントリの下で設定されています.したがって,VCエンジニアリングファイルを読み取り,対応する属性を変更するだけでよい.Jscriptスクリプトコードは次のとおりです.
try
{
var WSShell = WScript.CreateObject("WScript.Shell");
var num = WScript.ScriptFullName.lastIndexOf("\\");
//
var strCurPath = WScript.ScriptFullName.substr(0,num);
var FileSys = WScript.CreateObject("Scripting.FileSystemObject");
//
if (FileSys.FolderExists(strCurPath))
{
// Plugin vc
var strPluginFolder = strCurPath + "\\Plugin";
var PluginFolder = FileSys.GetFolder(strPluginFolder);
// , ,
var PlugSet = new Enumerator(PluginFolder.SubFolders);
for (var i = 0 ; !PlugSet.atEnd(); PlugSet.moveNext(),i++)
{
var strProjectFolder = strPluginFolder + "\\";
strProjectFolder = strProjectFolder + PlugSet.item().Name;
var ProjectFolder = FileSys.GetFolder(strProjectFolder);
//
var fenum = new Enumerator(ProjectFolder.Files);
for (var j = 0 ; !fenum.atEnd(); fenum.moveNext(),j++)
{
var strPrjFileName = fenum.item().Name;
var strSuff = FileSys.GetExtensionName(strPrjFileName);
// vc ,
if((strSuff=="vcproj"))
{
strProjectFolder = strProjectFolder + "\\";
strPrjFileName = strProjectFolder + strPrjFileName;
ChangePrjSetting(strPrjFileName);
}
}
}
}
}
catch(e)
{
WScript.Echo(e.description);
}
WScript.Echo(" !");
// ,strPrjPath
function ChangePrjSetting(strPrjPath)
{
try
{
var xmlDoc = null;
var signatures = [
"Msxml2.DOMDocument.6.0",
"Msxml2.DOMDocument.5.0",
"Msxml2.DOMDocument.4.0",
"Msxml2.DOMDocument.3.0",
"Msxml2.DOMDocument",
"Microsoft.XmlDom"];
for (var index = 0; index < signatures.length; index++)
{
try {
xmlDoc = new ActiveXObject(signatures[index]);
}
catch (e)
{
WScript.Echo(e.description);
}
}
xmlDoc.async = false;
xmlDoc.resolveExternals = false;
var strXmlPath = strPrjPath;
xmlDoc.load(strXmlPath);
if (xmlDoc.parseError.errorCode != 0)
{
var myError = xmlDoc.parseError;
WScript.Echo(" xml : " + myError);
}
else
{
//
var strPattern = /gdal_1_9_1_vc9/; //
//
ChangePrjAttribute(strXmlPath,xmlDoc,"AdditionalIncludeDirectories","include",strPattern);
//
ChangePrjAttribute(strXmlPath,xmlDoc,"AdditionalLibraryDirectories","lib",strPattern);
// release
strPattern = /gdal19_i.lib/;
ChangePrjDependenLib(strXmlPath,xmlDoc,"gdal19_i.lib","gdal110_i.lib",strPattern)
// debug
strPattern = /gdal19_i_D.lib/;
ChangePrjDependenLib(strXmlPath,xmlDoc,"gdal19_i_D.lib","gdal110_i_D.lib",strPattern)
}
}
catch(e)
{
WScript.Echo(e.description);
}
}
//
function ChangePrjAttribute(strXmlPath,xmlDoc,strAttribute,strSuffix,strPattern)
{
var BinGroup = xmlDoc.getElementsByTagName("Tool");
for (var i = 0; i < BinGroup.length; i++)
{
var strIncDir = BinGroup.item(i).getAttribute(strAttribute);
if(null!=strIncDir)
{
var vecIncPath = new Array();
vecIncPath = strIncDir.split(";");
var bChange = false;
for(var j=0;j<vecIncPath.length;j++)
{
var result = strPattern.exec(vecIncPath[j]);
if(null!=result)
{
//
vecIncPath[j] = "$(THIRD_PARTY)\\gdal_1_10_vc9\\"+strSuffix;
bChange = true;
}
}
if(true==bChange)
{
// ,
var NewIncPath = vecIncPath[0];
for(var k=1;k<vecIncPath.length;k++)
{
NewIncPath = NewIncPath + ";"
NewIncPath = NewIncPath + vecIncPath[k];
}
BinGroup.item(i).setAttribute(strAttribute,NewIncPath);
xmlDoc.save(strXmlPath);
}
}
}
}
//
function ChangePrjDependenLib(strXmlPath,xmlDoc,strOldLib,strNewLib,strPattern)
{
var BinGroup = xmlDoc.getElementsByTagName("Tool");
for (var i = 0; i < BinGroup.length; i++)
{
var strDepLib = BinGroup.item(i).getAttribute("AdditionalDependencies");
if(null!=strDepLib)
{
var vecLibPath = new Array();
vecDepLib = strDepLib.split(" ");
var bChange = false;
for(var j=0;j<vecDepLib.length;j++)
{
var result = strPattern.exec(vecDepLib[j]);
if(null!=result)
{
//
vecDepLib[j] = strNewLib;
bChange = true;
}
}
if(true==bChange)
{
// ,
var NewDepLib = vecDepLib[0];
for(var k=1;k<vecDepLib.length;k++)
{
NewDepLib = NewDepLib + " ";
NewDepLib = NewDepLib + vecDepLib[k];
}
BinGroup.item(i).setAttribute("AdditionalDependencies",NewDepLib);
xmlDoc.save(strXmlPath);
}
}
}
}