[Qbs] Accessing qbs.architecture in Probe
leon.buckel at clausmark.com
Thu Jan 30 13:41:44 CET 2020
Ah, sorry I accidentally only replied to Christian. Here's the original message:
Here's the probe. I is instantiated at project level where the value of 'generatedQbsFilePath' is added to the 'references' property.
If you run it like this, 'targetArch' will be undefined.
property path conanFile
readonly property string targetArch: qbs.Architecture
readonly property string buildType: qbs.buildVariant === "debug" ? "Debug" : "Release" // Conan's build_type is case-sensitive!
readonly property path conanPackageDir: FileInfo.joinPaths(FileInfo.canonicalPath("."), qbs.configurationName, "conan")
readonly property path generatedQbsFilePath: FileInfo.joinPaths(conanPackageDir, "/conanbuildinfo.qbs")
var process = new Process();
process.exec("conan", ["user", "test", "-p", "test123"], true);
process.exec("conan", ["install", conanPackageDir, "-s", "build_type=" + buildType, "-s", targetArch], true);
found = true;
>> readonly property string targetArch: qbs.Architecture
>You have a typo here (the 'a' should be lower-case). (If this is not the real code: Please make sure to always copy-paste, not type up some approximation).
Yeah, sorry that was a typo. It's the real code, I only added the arch property for the example because I'm not using it currently since it's not working.
> Though it will still work if you set the architecture via a profile.
How would I access a property set in a profile? I think I've tried it before but I probably did something wrong.
Also in the blog post about the release of qbs 1.15.0 it says the following:
Probes on the project level are now evaluated before Profile items. That way a Qbs project can easily interface to package managers like Conan or vcpkg and resolve all build dependencies including compiler toolchains in a clean and platform-agnostic way. [...]
Doesn't that mean that profile specific properties are inaccessible at the time the probe is evaluated?
> Note that such an architecture-agnostic Conan probe breaks if you are going
> to multiplex a product over different architectures
At the moment I'm not using multiplexing but that is a good point and something to consider.
> In that case it would
> better to put the probe into the product or even a separate module. Make
> every product in your project depend on that module.
How would I reference the qbs file generated by conan though? I'm only doing it with this project level probe because I thought there was no other way, or is there?
On 1/30/20, 1:28 PM, "Qbs on behalf of Richard Weickelt" <qbs-bounces at qt-project.org on behalf of richard at weickelt.de> wrote:
>> Here's the probe. I is instantiated at project level where the value of
>> 'generatedQbsFilePath' is added to the 'references' property.
Leon, would you please post your probe code to the mailing list? I am
generally interested in Qbs Conan integration and would like to see how
others do it.
> That's generally a problem. Modules are per-product, and with very few
> exceptions (constants like qbs.hostOS) will not have proper values on the
> project level. Though it will still work if you set the architecture via
> a profile.
If you know what architecture your project will be built for, specify a
project property and set this from command line (or in Qt Creator).
Note that such an architecture-agnostic Conan probe breaks if you are going
to multiplex a product over different architectures. In that case it would
better to put the probe into the product or even a separate module. Make
every product in your project depend on that module. The probe should only
run a single time for the whole project. Then you should be able to use
properties from the qbs module as inputs of the probe.
Qbs mailing list
Qbs at qt-project.org
More information about the Qbs