[Qbs] pre-built products (cont.)

Joerg Bornemann joerg.bornemann at qt.io
Tue Sep 12 09:14:40 CEST 2017

On 10/09/2017 03:44, Christian Gagneraud wrote:

> In my source tree I have pre-built binaries, these are third-party
> library that we get in binary form only. (PS: don't tell me that it is
> bad, i already know that. I cannot change that, i have to deal with
> it)

Even if it's bad we cannot ignore this situation. Some hardware vendors 
only provide binary libraries to talk to their devices.


> So I would like to have a product for each of these, that would export
> a include path, a lib search path and a lib name.
> But of course i don't want these product to be built, because i don't
> have the source code.
> The reason i'm thinking about using the product item is that i can
> then simply add references to the dependings product.
> Is it the right approach?

While this works, you don't need to use a product. A module would be 
more "natural". Effectively, the Export item you're writing already 
defines a module with the same name as the product.

> Maybe i should come with a Module approach, eg, something similar to
> Qt itself, that would allow me to add:
> Depends {
>     name: "ThirdParty"
>     submodules: [
>        "lib1", "lib2", ...
>     ]
> }
> I never tried that, not sure how to get started...

You would create a folder structure like this


and create $projectroot/modules/ThirdParty/lib1/x86.qbs

with the content

Module {
     condition: qbs.architecture === "x86"
     Depends { name: "cpp" }
     cpp.dynamicLibraries: ["somewhere/x86/lib1.lib"]

Module {
     condition: qbs.architecture === "x86_64"
     Depends { name: "cpp" }
     cpp.dynamicLibraries: ["somewhere/x86_64/lib1.lib"]

and so on. Or you cram all platforms into one file - as you like.

We should have a documentation page covering this use case. I've created 
QBS-1191 for that.


More information about the Qbs mailing list