---
name: "progen"
section: "1"
platform: "linux"
package: "python3-project-generator"
version: "0.12.0-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/progen"
---

# progen(1)

generate and manage project files for embedded development tools

## NAME

**progen** - generate and manage project files for embedded development tools

## SYNOPSIS

**progen** \[**GLOBAL\_ARGUMENT**\] **COMMAND** \[**ARGUMENTS**\]

## DESCRIPTION

**progen** allows you to define an embedded project in text (YAML) files and generate IDE-specific project files based on the rules defined in these records.

## GLOBAL ARGUMENTS

**progen** supports the following global arguments for all commands listed below:

- \-v

  increase verbosity of output (repeat for even more verbose output)

- \-q

  decrease verbosity of output (repeat for even less verbose output)

## COMMANDS

### init

-

  ```
  progen init -p PROJECT -tar TARGET_NAME [-dir SCAN_DIR] -o OUTPUT_DIR [-v | -q]
  ```

Add **progen** support to a project

If you want **progen** support for a project, this is the command to use. It scans the repository for files and creates 2 YAML files:

- 1\)

  the main project file (projects.yaml), and

- 2\)

  a project YAML file

In the project YAML file, there are all sources/includes and other project-related settings which **progen** finds in the repository. This creates a valid progen project file if a folder contains one valid project. In the case there are many, this command can serve at least as guidance - edit and move the YAML file accordingly to a folder structure to split projects.

**Arguments**

- \-p

  project name

- \-tar

  target name for the project

- \-dir

  directory to scan (default: none; scan all in directory **progen** was executed in)

- \-o

  directory for generated files

- \-v

  increase verbosity of output (repeat for even more verbose output)

- \-q

  decrease verbosity of output (repeat for even less verbose output)

### generate

-

  ```
  progen generate -f FILE [-p PROJECT] [-t TOOL] [-b] [-c] [-o OPTIONS] [-j JOBS] [-v | -q]
  ```

Export defined projects

**Arguments**

- \-f *FILE*

  path to projects.yaml file

- \-p *PROJECT*

  name of the project to generate. If not specified, all projects within projects in projects.yaml are exported

- \-t *TOOL*

  tool name (uvision, iar, etc). If not specified, tools are checked in records (tool\_supported).

- \-b

  build the exported project (note: not every tool supports building a project)

- \-c

  copy all files defined for a project to exported directory

- \-o *OPTIONS*

  toolchain options

- \-j

  number of concurrent jobs to use for generating projects (default is 1; not supported by all tools)

- \-v

  increase verbosity of output (repeat for even more verbose output)

- \-q

  decrease verbosity of output (repeat for even less verbose output)

### build

-

  ```
  progen build -f FILE [-p PROJECT] [-t TOOL] [-c] [-k] [-o OPTIONS] [-x] [-j JOBS] [-v | -q]
  ```

Export a project, then build it. Note that not all tools support building.

**Arguments**

- \-f *FILE*

  path to projects.yaml file

- \-p *PROJECT*

  name of the project to build (if not specified, all projects within projects in projects.yaml are built)

- \-t *TOOL*

  build project files for specified tool

- \-c

  copy sources (as it exports first, this is used for exporting prior to building)

- \-k

  clean project before building

- \-o *OPTIONS*

  toolchain options

- \-x

  stop on first failure

- \-j

  number of concurrent build jobs (default is 1; not supported by all tools)

- project

  specify projects to be generated and built

- \-v

  increase verbosity of output (repeat for even more verbose output)

- \-q

  decrease verbosity of output (repeat for even less verbose output)

### list

-

  ```
  progen list targets [-v | -q]
  progen list tools [-v | -q]
  progen list -f FILE projects [-v | -q]
  ```

List targets, tools or projects

**Arguments**

- targets

  list all supported targets

- tools

  list all supported tools

- projects

  list all projects the repository supports (requires -f argument specified)

- \-f *FILE*

  path to projects.yaml

- \-v

  increase verbosity of output (repeat for even more verbose output)

- \-q

  decrease verbosity of output (repeat for even less verbose output)

### clean

-

  ```
  progen clean -f FILE -p PROJECT [-t TOOL] [-v | -q]
  ```

Remove **progen** files/folders

This command removes progen-related files/folders. If progen generates data to various folders (for example, a per-project directory somewhere), this command will remove those folders.

**Arguments**

- \-f *FILE*

  path to projects.yaml file

- \-p *PROJECT*

  the project name which should be cleaned (removed)

- \-t *TOOL*

  the tool name (if not specified, tools are taken from tools\_supported)

- project

  specify projects to be cleaned (removed)

- \-v

  increase verbosity of output (repeat for even more verbose output)

- \-q

  decrease verbosity of output (repeat for even less verbose output)

## TOOLS

**progen** supports generating projects for the following tools:

- •

  uVision4 and uVision5

- •

  IAR

- •

  Makefile (GCC ARM)

- •

  Makefile (ARMCC)

- •

  Cmake (GCC ARM)

- •

  CoIDE (GCC ARM)

- •

  Eclipse (Makefile with GCC ARM)

- •

  Sublime (Makefile with GCC ARM)

- •

  Visual studio (Makefile with GCC ARM)

## EXAMPLES

To generate a uvision project file for the k20d50m\_blinky target:

-

  ```
  progen generate -f projects.yaml -p k20d50m_blinky -t uvision
  ```

## COPYRIGHT

Copyright 2014-15 Martin Kojtal

## AUTHOR

This manual page is based on the progen documentation. It was created by Nick Morrott \<nickm@debian.org\> for the Debian GNU/Linux system, but may be used by others.

## SEE ALSO

[**valinor**(1)](/valinor/1.md), [**progendef**(1)](/progendef/1.md)

Getting Started Guide: https://github.com/project-generator/project\_generator/wiki/Getting\_started

Project Generator examples: https://github.com/project-generator/project\_generator\_mbed\_examples
