[Qbs] Define the link order without an explicit dependency
Richard Weickelt
richard at weickelt.de
Sun Aug 11 09:55:20 CEST 2019
> Why not have a central property that controls these dependencies everywhere?
> Can be done without redundant code via a proxy product:
>
> Product {
> name: "A"
> property string libAVariant: "a1"
> Export {
> Depends { name: "A-1"; condition: product.libAVariant === "a1" }
> Depends { name: "A-2"; condition: product.libAVariant === "a2" }
> }
> }
>
> And just depend on A everywhere. The libAVariant property could also be in a Project item or some helper module.
Thanks for your reply. You are suggesting to switch libAVariant globally and
I can see how that would work.
My project consists of multiple products where some have a dependency on
libAVariant "a1" whereas others have a dependency on "a2". If I apply your
suggestion, I would only be able to build either apps depending on "a1" or
"a2" at a time, but not both.
I was able to work around the problem by linking against the whole library
a1 or a2 in the app:
Product {
name: "a-headers"
}
StaticLibrary {
name: "a1"
Depends { name: "a-headers" }
}
StaticLibrary {
name: "a2"
Depends { name: "a-headers" }
}
StaticLibrary {
name: "b"
Depends { name: "a-headers" }
}
Application {
name: "someapp-with-a1"
Depends { name: "a1"; cpp.linkWholeArchive }
Depends { name: "b" }
}
Application {
name: "someapp-with-a2"
Depends { name: "a2"; cpp.linkWholeArchive }
Depends { name: "b" }
}
That way the link order doesn't matter anymore. Not 100% optimal, but it works.
More information about the Qbs
mailing list