[Qbs] Building code generator and its dependencies for a different architecture than the rest of the products
Christian Kandeler
christian.kandeler at qt.io
Fri Mar 20 15:41:21 CET 2020
On Fri, 20 Mar 2020 14:10:49 +0000
Leon Buckel <leon.buckel at clausmark.com> wrote:
> I have a project with the following products:
>
> * Shared library
> * Code generator tool
> * Application
>
> The code generator and application both depend on the shared library. The build process is as follows:
>
> 1. Build the shared library
> 2. Build the code generator and link against the library
> 3. Use the previously built generator to generate code used by the application.
> 4. Build the application and link against the library
>
> This works fine when building for windows or macOS but I'm running into an issue when targeting iOS.
> Basically what I want is to build the generator as a Mac application so that it can be run during the build to generate code for the iOS app.
> Since the library is used by both it should be built for both architectures.
>
> I looked into multiplexing but I'm not sure it does exactly what I want but maybe I misunderstood something.
> Is there a way to do this with qbs?
Excellent, a real-life test case...
Yes, this is pretty much what multiplexing is for. However, there isn't a lot of experience with how to best set this up in practice.
Also, I notice that for your use case we should probably have a qbs.targetPlatforms property...
Anyway, as of right now you'd do this with in-project profiles. Define them in e.g. the top-level project file:
Profile {
name: "hostProfile"
qbs.targetPlatform: qbs.hostPlatform
}
Profile {
name: "targetProfile"
baseProfile: project.profile // Assumes that the iOS profile is your main profile that you build the project with
}
Then multiplex your library over these profiles:
DynamicLibrary {
// ...
multiplexByQbsProperties: ["profiles"]
qbs.profiles: ["hostProfile", "targetProfile"]
}
Your app and build tool use normal Depends items for pulling in the library; the matching should work automatically.
Note: The host profile as written above relies on the host toolchain being auto-detected, i.e. PATH and/or other variables have to be suitably set up.
Good luck, and please share your findings.
Christian
More information about the Qbs
mailing list