[Qbs] Accessing qbs.architecture in Probe
Leon Buckel
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.
Probe {
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")
configure: {
/*...*/
var process = new Process();
process.setWorkingDirectory(conanPackageDir);
process.exec("conan", ["user", "test", "-p", "test123"], true);
process.exec("conan", ["install", conanPackageDir, "-s", "build_type=" + buildType, "-s", targetArch], true);
console.info(process.readStdOut());
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?
Leon
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.
Richard
_______________________________________________
Qbs mailing list
Qbs at qt-project.org
https://lists.qt-project.org/listinfo/qbs
More information about the Qbs
mailing list