On Fri, 20 Mar 2020 14:10:49 +0000
Leon Buckel <leon.buc...@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
_______________________________________________
Qbs mailing list
Qbs@qt-project.org
https://lists.qt-project.org/listinfo/qbs

Reply via email to