visual studio 2010 中VC++自定义项目模板

最近在win平台上用opencv,每次新建项目都要配置包含目录、库目录、连接器依赖项等等项目属性,觉得很不方便,于是想在vs2010中应该有比较智能的方式。

到网上一查,查到个“导出项目模板”功能,觉得应该行了吧?不行,发现那一项总是灰色不可用状态。仔细一查,发现原来因为C++不支持。。。

继续寻找解决方法。发现有人说新建一个“自定义向导”(在新建项目那里)也可以实现类似功能。这下应该有谱了。

新建“自定义向导”项目,不要选择UI,完成后项目中有个default.vcxproj,心想把这货改成我想要的项目属性应该妥妥的了,动手更改项目xml文件(我配置opencv需要的项目属性)。

改完后心想这下应该可以了。

试了一下:不行!看来还要研究一下这个“自定义向导”了!

仔细观察几个文件后发现:default.js这个JScript文件应该执行主要的逻辑动作。其中函数CreateCustomProject引起了我的注意:

function CreateCustomProject(strProjectName, strProjectPath)
{
try
{
var strProjTemplatePath = wizard.FindSymbol('PROJECT_TEMPLATE_PATH');
var strProjTemplate = '';
strProjTemplate
= strProjTemplatePath + '\\default.vcxproj';

var Solution = dte.Solution;
var strSolutionName = "";
if (wizard.FindSymbol("CLOSE_SOLUTION"))
{
Solution.Close();
strSolutionName
= wizard.FindSymbol("VS_SOLUTION_NAME");
if (strSolutionName.length)
{
var strSolutionPath = strProjectPath.substr(0, strProjectPath.length - strProjectName.length);
Solution.Create(strSolutionPath, strSolutionName);
}
}

var strProjectNameWithExt = '';
strProjectNameWithExt
= strProjectName + '.vcxproj';

var oTarget = wizard.FindSymbol("TARGET");
var prj;
if (wizard.FindSymbol("WIZARD_TYPE") == vsWizardAddSubProject) // vsWizardAddSubProject
{
var prjItem = oTarget.AddFromTemplate(strProjTemplate, strProjectNameWithExt);
prj
= prjItem.SubProject;
}
else
{
prj
= oTarget.AddFromTemplate(strProjTemplate, strProjectPath, strProjectNameWithExt);
}
var fxtarget = wizard.FindSymbol("TARGET_FRAMEWORK_VERSION");
if (fxtarget != null && fxtarget != "")
{
fxtarget
= fxtarget.split('.', 2);
if (fxtarget.length == 2)
prj.Object.TargetFrameworkVersion
= parseInt(fxtarget[0]) * 0x10000 + parseInt(fxtarget[1])
}
return prj;
}
catch(e)
{
throw e;
}
}

因为不行的原因在于没有正确加载我们设置的default.vcxproj文件,于是我觉得是路径出了问题,注意上述代码中红色的地方。去网上查了下这参数所代表的意思,发现被坑爹了:这货是VC安装目录下的VCWizards目录!所以根本加载不了我们想要的项目文件!根据http://msdn.microsoft.com/en-us/library/cc9ss95t.aspx将其更改为START_PATH后,测试,一切正常!

后记:vs对vc++的支持真是很不够!如果你是个完美主义者,对于这样设置还有些不满:想要跟在新建项目中新建“空项目”后的效果一样,有那些默认的筛选器,可以在项目根目录加入default.vcxproj.filters文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
</Project>
并且注释掉default.js中的AddFilters函数内容即可!

posted @ 2011-07-11 21:01  yhchuan  Views(2278)  Comments(0Edit  收藏  举报