Special Property Values

Depending on the context, Qbs provides the following special values for use in property bindings and JavaScript code:

base

This value is useful when making use of inheritance. It stands for the value of the respective property in the item one level up in the inheritance chain. For instance:

Product { // defined in MyProduct.qbs
    Depends { name: "mymodule" }
    mymodule.someProperty: ["value1"]
}
------ some other file ------
MyProduct {
    mymodule.someProperty: base.concat(["value2"]) // => ["value1", "value2"]
}

exportingProduct

Within an Export item, you can use the exportingProduct variable to refer to the product which defines the Export item:

Product {
    Export {
        Depends { name: "cpp" }
        cpp.includePaths: exportingProduct.sourceDirectory
    }
}

filePath

This value holds the full file path to the .qbs file it appears in. This property is rarely used, but might be useful when debugging:

Product {
    property bool dummy: {
        console.info("I'm located at " + filePath);
    }
}

importingProduct

Within an Export item, you can use the importingProduct variable to refer to the product that pulls in the resulting module:

Product {
    Export {
        Depends { name: "cpp" }
        cpp.includePaths: importingProduct.buildDirectory
    }
}

Usually, you should use the product variable instead for consistency with Module items.

module

This value holds the properties of the module that contains the current item:

Module {
    property bool enableGroup
    property bool enableRule
    Group {
        condition: enableGroup // available without qualification because Module is a direct parent item
        Rule {
            condition: module.enableRule // Shortcut for product.<module name>.enableRule
            // ...
        }
    }
}

original

On the right-hand side of a module property binding, this refers to the value of the property in the module itself (possibly overridden from a profile). Use it to set a module property conditionally:

Module { // This is mymodule
    property string aProperty: "z"
}
----------
Product {
    Depends { name: "mymodule" }
    Depends { name: "myothermodule" }
    // "y" if myothermodule.anotherProperty is "x", "z" otherwise:
    mymodule.aProperty: myothermodule.anotherProperty === "x" ? "y" : original
}

Note: In all but the most exotic cases, a Properties item is the preferred way to achieve the same result:

Product {
    Depends { name: "mymodule" }
    Depends { name: "myothermodule" }
    Properties {
        condition: myothermodule.anotherProperty === "x"
        mymodule.aProperty: "y"
    }

outer

This value is used in nested items, where it refers to the value of the respective property in the surrounding item. It is only valid in Group and Properties items:

Product {
    Depends { name: "mymodule" }
    mymodule.someProperty: ["value1"]
    Group {
        name: "special files"
        files: ["somefile1", "somefile2"]
        mymodule.someProperty: outer.concat(["value"]) // => ["value1", "value2"]
    }
}

path

This value holds the path to the folder where the .qbs file is located. Use it to e.g. add the product's directory to file paths:

Product {
    Depends { name: "cpp" }
    cpp.includePaths: path
}

product

This value holds the properties of the product that contains the current item or pulls in the current module:

Module {
    Rule {
        Artifact {
            fileTags: product.type
            filePath: {
                var result = input.fileName;
                // module properties are available as well
                if (product.qbs.buildVariant === "debug")
                    result = result + "_debug";
                result = result + ".out";
                return result;
            }
        }
    }
}

Within the Export item, same as importingProduct.

project

This value holds the properties of the project that references the current item or pulls in the current module:

Project {
    property bool enableProduct: true
    Product {
        name: "theProduct"
        condition: project.enableProduct
    }
}

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.

© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.