Product Item
A product typically represents the result of a build process. It specifies a set of input and output files and a way to transform the former into the latter. For example, the following product sets up a very simple C++ application:
  Product {
      name: "helloworld"
      type: "application"
      files: "main.cpp"
      Depends { name: "cpp" }
  }
The type property specifies what will be built (an executable). The files property specifies the input files (one C++ source file), and the Depends item pulls in the logic from the cpp module about how to do the necessary transformations. For some often-used types of products, Qbs pre-defines special derived items that save users some typing. These are:
- Application
- CppApplication
- DynamicLibrary
- StaticLibrary
Therefore, the above example could also be written like this:
  CppApplication {
      name: "helloworld"
      files: "main.cpp"
  }
Any property prop attached to this item is available in sub-items as product.prop, as well as in modules that are loaded from this product.
Product Properties
| Property | Type | Default | Description | 
|---|---|---|---|
| builtByDefault | bool | true | If false, the product will only be built if this is explicitly requested, either by listing the product name as an argument to --productsor by giving thebuildcommand the--all-productsoption. | 
| condition | bool | true | If false, the product will not be built. | 
| name | string | empty string | The name of the product. Used to identify the product in a Dependsitem, for example. The value of this property must be a simple JavaScript expression that does not depend on module properties or values that are non-local to this product.
  CppApplication {
      name: "hello" + "world"
      // valid
  }
  CppApplication {
      name: "app_" + qbs.targetOS.join("_")
      // invalid
  }
To change the name of your product's target artifact, modify  | 
| type | stringList | empty list | The file tags matching the product's target artifacts. | 
| targetName | string | namewith illegal file name characters replaced by underscores | The base file name of the product's target artifacts. | 
| destinationDirectory | string | product.buildDirectory | The directory where the target artifacts will be located. If a relative path is given, the base directory will be project.buildDirectory. | 
| files | stringList | empty list | A list of source files. Syntactic sugar to save a Groupitem for simple products. Relative paths are resolved using the parent directory of the project file that sets the property. | 
| excludeFiles | stringList | empty list | A list of source files not to include. Useful with wildcards. For more information, see Group Item. | 
| consoleApplication | bool | linker-dependent | If true, a console application is generated. If false, a GUI application is generated. Only takes effect on Windows. This property also influences the default application type on Apple platforms. If true, an application bundle is generated. If false, a normal executable is generated. | 
| qbsSearchPaths | stringList | project.qbsSearchPaths | See the documentation of the Project Item property of the same name. The value set here will be merged with the one inherited from the project. | 
| version | string | undefined | The version number of the product. Used in shared library filenames and generated Info.plist files in Apple application and framework bundles, for example. | 
The following properties are relevant for product multiplexing only. Unless multiplexing is desired, they can be left at their default values.
Note: We do not promise backwards compatibility for multiplexing properties as they are likely to change in future Qbs versions.
| Property | Type | Default | Description | 
|---|---|---|---|
| aggregate | bool | undefined | If true, an aggregate product will be created that has dependencies on all multiplex instances of this product. | 
| multiplexedType | stringList | undefined | Specifies the product type for the multiplexed product instances. | 
| multiplexByQbsProperties | stringList | ["profiles"] | Specifies which properties of the qbs module will be used for product multiplexing. Its value must be a subset of ["architectures", "buildVariants", "profiles"]. | 
The following properties are automatically set by Qbs and cannot be changed by the user:
| Property | Type | Description | 
|---|---|---|
| buildDirectory | path | The build directory for this product. This is the directory where generated files are placed. | 
| sourceDirectory | path | The source directory for this product. This is the directory of the file where this product is defined. |