Supported project types in the IDE

The QNX IDE supports these project types:

Makefile project

A Makefile project would work for any project that has a Makefile (by default). A Makefile project can launch anything as an external builder in any folder. The IDE starts make, and after make exits, the IDE refreshes the workspace to see what was created. You can change the make command and/or run specific make targets, but the IDE has no control over what make is doing.

Since the IDE doesn't know what's being built, it would have problems parsing source files (which it does internally to allow navigation, code completion, syntax highlighting, code generation, and refactoring). Therefore, if you use a Makefile project, you have to modify the Indexer (the internal parser) to point it to the missing Includes, as well as what Defines your parser uses for conditional compilation. The process of determining this is called Discovery, and it can be controlled using Discovery Options.

Note: If you know what includes and defines you want to use, it's easier to specify them directly (Project > Properties > C/C++ General > Path and Settings).

QNX Project

A QNX project is a special kind of Makefile project with additional control over the make. To use a QNX project, you also have to use QNX recursive Makefiles. QNX recursive Makefiles are conventions for creating Makefiles that use specific variables and layout. This lets the IDE parse the common.mk, and to provide the GUI with control over the Makefile options and build variants. Typically, a single QNX project is good enough to build one binary/library for several variants, such as x86 and PPC in the debug and release modes.

Managed Project

A managed project is a CDT-specific project that doesn't use Makefiles, and all of the build settings are controlled by the GUI. However, it can use Makefiles, if you use the external make builder. In that case, it generates them automatically and they shouldn't be checked into source control.

The problem associated with this project type is its inability to perform a build of the project from command line (although, it's possible in simple cases with some additional setup files). In addition, there are restrictions on what you build and how, particularly if you use special steps in the build that involves other tools.