- Qbs Manual
- Project Properties
- Qbs 2.6.1

Autotest ◦ Buildconfig Module

# Project Properties

It would be nice if our project was configurable. Let's add some properties to our root project file:

     Project {
         property string version: "1.0.0"
         property bool installDebugInformation: true
         property bool withTests: false
         property stringList autotestArguments: []
         property stringList autotestWrapper: []

         name: "My Project"
         minimumQbsVersion: "2.0"
         // ...

Now we can use those properties in our helper items and in products:

     CppApplication {
         version: project.version
         consoleApplication: true
         install: true
         installDebugInformation: project.installDebugInformation
         // ...

Here, we access the project file using the special project value. If the nearest project in the project tree does not have the desired property, Qbs looks it up in the parent project, potentially all the way up to the top-level project. We also use the installDebugInformation property here. By default, it has the same value as install but we want to make the debug information install optional.

Let's now disable the tests if `project.withTests` is `false`:

     SubProject {
         filePath: "test/test.qbs"
         Properties {
             condition: parent.withTests
         }
     }

Here we use the Properties item within the SubProject item. This item allows to override a subproject's properties which can be useful when adding some other Qbs project as a Git submodule. Of course, it is not very useful in our particular case since we only set the Project.condition property. We could achieve the same effect by setting the condition property of the SubProject item:

     SubProject {
         filePath: "test/test.qbs"
         condition: parent.withTests
     }

Another way would be to disable the test product. That way, an IDE would still show the whole project tree including disabled tests:

     // qbs/imports/MyAutoTest.qbs
     MyApplication {
         condition: project.withTests
         type: base.concat(["autotest"])
     }

Let's finally make our AutotestRunner configurable too:

     AutotestRunner {
         condition: parent.withTests
         arguments: parent.autotestArguments
         wrapper: parent.autotestWrapper
     }

There are several ways to override project properties from the command line. First, the special `project` variable can be used to set the properties of the top-level project:

     $ qbs resolve project.withTests:false

You can also refer to properties using project's name:

     $ qbs resolve "projects.My Project.withTests:false"

This can again be useful for accessing the properties of external sub-projects. Note that since the project name contains spaces, we use quotes here.