[Qbs] Multiple "favored" binaries from one product

Christian Kandeler christian.kandeler at qt.io
Thu May 4 18:05:55 CEST 2017

On 05/04/2017 04:19 PM, Thomas Ballenthin wrote:
> I'm currently building my unit tests each as individual CppApplication. This works fine as it is. But now I'm facing the problem to build each unit test twice with different compiler options per set.

Let me make sure I understand the use case correctly: You build your
project only once, but selected products shuld exist more than once,
with varying build properties?

> As I understand, each product outputs a single file. What is the most convenient way to produce two binaries with different compiler switches from the same source files? 

At the moment, the only way to really multiplex on the product level is
using (external) profiles. See the "profiles" entry in
https://doc.qt.io/qbs/product-item.html. As far as I can tell, this
would more or less map to the "flavor" thing if the profile contents
could be specified in-place, correct?

> I would like to reduce code duplication and not specify several CppApplications per unit test. Is there a way to have a "product factory", or rules that process groups of files and output binaries.

A less general way that might be sufficient for your needs would be to
move most of the product specification into a base item and instantiate
it twice:
// In TestX.qbs
CppApplication {
    // Depends { // ... }
    // files: [ ... ]
    // etc

// In your project file
Project {
    TestX {
        name: "testx1"
        cpp.defines: ["VARIANT1"]
    TestX {
        name: "testx2"
        cpp.defines: ["VARIANT2"]

Hope this helps,

More information about the Qbs mailing list