[QBS] Just a few questions

Christian Kandeler christian.kandeler at digia.com
Tue May 27 09:20:14 CEST 2014

On 05/26/2014 07:10 PM, Kevin Chaves wrote:
> I thought I read something about qbs being able to use inheritance but
> I’m not sure if this is true. And I’m a little confused over the
> difference between Project { references: } and Project { SubProject {}
> }.

"references" is a shorter way of saying "Subproject", but without the 
ability to attach properties, for instance. See the documentation at

> I tried using function commonCxxFlags {} at the top level directory but
> that didn't seem to be inherited by the subprojects.
> ---HelloWorldProject.qbs---
> Project{
>    function commonCxxFlags{
>      var flags = “-std=c++0x”
>      return flags
>    }

Does this even parse? I strongly suggest you use a property for that:
     property stringList commonCxxFlags: ["-std=c++0x"]

>    SubProject {
>      filePath: “HelloLib/HelloLib.qbs”
>    }
>    SubProject {
>      filePath: “HelloApp/HelloApp.qbs”
>    }

You could use "references" here, as you do not do anything special with 
the sub-projects.

> }
> ---HelloLib/HelloLib.qbs---
> StaticLibrary {
>    name: “HelloLib”
>    files: [“*.cpp”,  “*.h”]
>    Depends { name: “cpp” }
>    cpp.cxxFlags = commonCxxFlags

This should say "project.commonCxxFlags", as you are not directly under 
a Project item, but a Product item (of which StaticLibrary is a 
subtype). The magic property "project" is available in most contexts to 
refer to the next Project item (travelling up the item hierarchy).

> It looks like I might be able to do something like this in 1.3 where
> sourceDirectory can be used with… moduleSearchPath I think it was.

No idea what sourceDirectory has to do with this.

> Also
> is it possible to get the qmake and gcc being used to build a .pro
> project? We use external libraries as part of the build and they only
> support .pro for now. Converting them to qbs probably won’t be too
> difficult but if i don’t have to that would be nice.

I guess you could achieve something like that with a custom Rule or 
Transformer, but you should be aware that that part of the build will be 
opaque to qbs, so a bit of time will be wasted calling qmake/make when 
building incrementally as qbs won't be able to tell whether that is 
actually necessary.


More information about the Qbs mailing list