The CrossStudio New Project Dialog works from a file called `project_templates.xml` which is held in the `targets` subdirectory of the CrossStudio installation directory. We anticipate that you may want to add your own new project types so they are structured using XML syntax to enable simple construction and parsing.

The first entry of the project file defines the XML document type which is used to validate the file format.

    <!DOCTYPE Project_Templates_File>

The next entry is the projects element; which is used to group a set of new project entries into an XML hierarchy.

    <projects>

      <project....

    </projects>

Each project entry has a project element that contains the class of the project (attribute `caption`), the name of the project (attribute `name`), it's type (attribute `type`) and a description (attribute `description`).

    <project caption="ARM Evaluator7T" name="Executable" description=&uot;An executable for an ARM Evaluator7T." type="Executable"/>

The project type can be one of

- "Executable" - a fully linked executable.
- "Library" - a static library.
- "Object file" - an object file.
- "Staging" - a staging project.
- "Combining" - a combining project.
- "Externally Built Executable" - an externally built executable.

The configurations that are to be created for the project are defined using the `configuration` element. The configuration element must have a `name` attribute.

    <configuration name="ARM RAM Release"/>

The property values to be created for the project are defined using the `property` element. If you have a defined value then you can specify this using the `value` attribute and optionally set the property in a defined `configuration`.

    <property name="target_reset_script" configuration="RAM" value="Evaluator7T_ResetWithRamAtZero()"/>

Alternatively you can include a property that will be shown to the user who can supply a value as part of the new project process.

    <property name="linker_output_format"/>

The folders to be created are defined using the `folder` element. The folder element must have a `name` attribute and can also have a `filter` attribute.

    <folder name="Source Files" filter="c;cpp;cxx;cc;h;s;asm;inc"/>

The files to be in the project are specified using the `file` element. You can use build system macros to specify files that are in the CrossStudio installation directory. Files will be copied to the project directory or just left as references based on the value of the `expand` attribute.

    <file name="$(StudioDir)/source/crt0.s" expand="no"/>

You can define the set of configurations that can be referred to in the the top-level `configurations` element.

    <configurations>

      <configuration....

    </configurations>

This contains the set of all configurations that can be created when a project is created. Each configuration is defined using a `configuration` element which can define the property values for that configuration.

    <configuration name="Debug">

      <property name="build_debug_information" value="Yes"/>