VS2013 Introjucer Exporter


Changes missing are related to adding the usage of the new exporter. The rest is as follows:

Changes to VC2010BuildConfiguration:

virtual String getToolsVersion() const { return "4.0"; }


void fillInProjectXml (XmlElement& projectXml) const
    projectXml.setAttribute ("DefaultTargets", "Build");
    projectXml.setAttribute ("ToolsVersion", getToolsVersion());

VS2013 exporter itself:

class MSVCProjectExporterVC2013 : public MSVCProjectExporterVC2010
    MSVCProjectExporterVC2013 (Project& p, const ValueTree& t)
        : MSVCProjectExporterVC2010 (p, t, "VisualStudio2013")
        name = getName();

    static const char* getName()                { return "Visual Studio 2013"; }
    static const char* getValueTreeTypeName()   { return "VS2013"; }
    int getVisualStudioVersion() const          { return 11; }
    String getSolutionComment() const           { return "# Visual Studio 2013"; }
    virtual String getToolsVersion() const      { return "12.0"; }

    String getPlatformToolset() const
        const String s (settings [Ids::toolset].toString());
        return s.isNotEmpty() ? s : "v120";

    Value getPlatformToolsetValue()             { return getSetting (Ids::toolset); }

    static MSVCProjectExporterVC2013* createForSettings (Project& project, const ValueTree& settings)
        if (settings.hasType (getValueTreeTypeName()))
            return new MSVCProjectExporterVC2013 (project, settings);

        return nullptr;

    void createExporterProperties (PropertyListBuilder& props)
        MSVCProjectExporterVC2010::createExporterProperties (props);

        const char* const toolsetNames[] = { "(default)", "v120", "v120_xp", nullptr };
        const var toolsets[]             = { var(),       "v120", "v120_xp" };

        props.add (new ChoicePropertyComponent (getPlatformToolsetValue(), "Platform Toolset",
                                                StringArray (toolsetNames),
                                                Array<var> (toolsets, numElementsInArray (toolsets))));

    void addPlatformToolsetToPropertyGroup (XmlElement& p) const
        forEachXmlChildElementWithTagName (p, e, "PropertyGroup")
            XmlElement* platformToolset (new XmlElement ("PlatformToolset"));
            platformToolset->addTextElement (getPlatformToolset());

            e->addChildElement (platformToolset);



Oh Microsoft, not yet another version to show on our list…!

Thanks, I’ll get around to adding this at some point!


Yeah, I don’t think it’s gonna end there, either!


Hey Jules,

VS2013 saves its projects with tools version 12.0. For consistency, which is why I added this in the first place, could you change this (Line 1445):

void fillInFiltersXml (XmlElement& filterXml) const
    filterXml.setAttribute ("ToolsVersion", "4.0");

to this:

void fillInFiltersXml (XmlElement& filterXml) const
    filterXml.setAttribute ("ToolsVersion", getToolsVersion());


Ah yes, gotcha. thanks, will update that!


Would it be possible to add the other optimization options for it?



It's already there; that option is per exporter configuration. :)

(now how the hell do I place inline screenshots now?)