Tools, software frameworks, and work flows for productivity with CMSIS based projects
 All Pages
Project Description (*.cprj) Format


The CMSIS Project description format is unifying the specification for the build of a software project. It is a public format to exchange project build information between tools that support the CMSIS-Pack based Run-Time Environment. In addition the format facilitates the tool driven construction of projects from partial projects, named project 'layers'. The project description is targeted to generate a single executable or library file.

The specification of this CMSIS Project description format (*.cprj) is replacing the previous format (*.cpdsc). The most significant differences are:

  • a new format specification which is independent from the CMSIS-Pack schema.
  • the scope of the description is limited to building a single application or library (no debugger setup).
  • the support of toolchain specific command line options applied to the whole project, individual components, file groups or file level.
  • the ability to divide projects into layers, which can be extracted from and added to projects.

Introduction of Layers

One example is the separation of an existing project into files and components that are HW dependent (board, device, processor) and those that are application specific. The result is a HW and an application layer. Assuming that there is layers for multiple boards and applications sharing common interfaces between layers, any combination of HW layer with an application layer can be combined to create projects and build consistent applications across a range of hardware.

Varieties of a build

Due to CMSIS-Pack's software lifecycle management features, projects can be build using different combinations of compatible pack and component versions. as well as different versions of a tool-chain. If the project contains descriptions for multiple different tool-chains, also different tool-chains can be used to create additional build variants.

The build system needs the following pieces of information to successfully build a project:

  • CMSIS-Packs used by project for component definitions and attributes of the targeted device.
  • Tool-chain name and version.
  • Target information including device vendor + name and enabled device features as well as additional command line options for the active tool-chain (C/C++ compiler, assembler, linker or librarian).
  • Component selection and configuration file information.
  • Files which are local to the project to be used by the build engine.
  • RTE folder containing preconfigured component configuration files.

Note: additional command line options for the tool-chains are tool-chain specific and are transparently passed onto the command line. Command line options related to the processor and it's features are automatically derived from the device information and must not be specified.


See Project Description Root for details about the description format..

See CMSIS-Build for further information how to build software based on the CMSIS Project description at the command line and how to create and manage projects using layers.

See Project Description Schema file for validation of project files.