Qbs 1.21 released
January 11, 2022 by Ivan Komissarov | Comments
The Qbs build tool version 1.21.0 is available.
Qbs is a community-driven language-agnostic build automation system. It is fast and offers an easy-to-learn language based upon QML.
What's new
Over 100 contributions went into this release since version 1.20.0. We have selected a few items below. Have a look into the complete changelog if you are interested in more details.
Named Module Providers
We redesigned the module providers feature. Previously, when Qbs encountered a missing module (say, Qt.core), it searched for a provider that can generate that module based on the module name – Qbs consecutively searched for providers named "Qt.core", "Qt" until it found one. This limited the ways to use providers – ultimately, it was not possible to have more than one provider for a given framework such as
Qt or Boost. Thus, we introduced the new qbsModuleProviders
property to the Product and
Project items, which allows to specify which providers are run.
For example, to invoke the Qt provider explicitly in your product, you can do the following:
CppApplication {
Depends { name: "Qt.core" }
files: "main.cpp"
qbsModuleProviders: ["Qt"]
}
It is also possible to prioritize modules generated by different module providers – providers contribute to the search path in the order specified by qbsModuleProviders
.
In the following example, the Qt.core module can come both from the "Qt" provider and the
"qbspkgconfig" provider (see below), but modules generated by the "Qt" provider have higher priority, as it
comes first in the list. This can be useful if you want to use a custom Qt installation (the Qt
provider will try to locate qmake in PATH
) but also have a fallback for a system Qt provided by pkg-config
.
CppApplication {
Depends { name: "Qt.core" }
files: "main.cpp"
qbsModuleProviders: ["Qt", "qbspkgconfig"]
}
We plan to add more providers, such as VCPKG or Conan, in the future.
The qbspkgconfig provider
Originally, Qbs used to use the "fallback" provider based on the pkg-config
tool if the searched module was not generated by any other provider. There are several problems with the fallback provider:
- It always tries to generate a module using
pkg-config
, even for non-C++ projects. - It does not properly support packages that have special characters in their names, such as the dot in "python-3.9".
- The fallback provider invoked
pkg-config
several times per module due to limitations of that tool's CLI, which could lead to bad performance when using multiple packages in a project.
Therefore, we added the new qbspkgconfig provider, which uses an internal C++ library for reading .pc files. This gives Qbs access to the information about dependencies between pkg-config
packages (which is not available via the CLI) and thus allows it to generate modules with respective dependencies. Also, it works much faster, as we now avoid expensive forking for the pkg-config
process.
The new provider and the underlying library mimic the pkg-config
tool behavior as much as we consider necessary. If you notice problematic incompatibilities, feel free to submit a bug report.
General
- The
capnproto
andprotobuf
modules can now use runtimes provided by the newqbspkgconfig
provider. - Qbs no longer migrates the profiles/ directory from the settings of a previous versions (QTCREATORBUG-26475), as this was only necessary in the pre-module provider days.
- We fixed a problem on FreeBSD where Qbs did not track changes in source files correctly due to the fact that it used low-precision file times (with milliseconds excluded). Now Qbs always uses high-precision file times on all systems. If you use a non-mainstream UNIX host and experience problems with this, please file a bug report.
- A new ConanfileProbe.verbose property was added which can be useful to debug problems with Conan.
C/C++ Support
- Added support for C++23.
- Added the Elbrus E2K architecture for the GCC toolchain (QBS-1675).
Android Support
- A new Android.ndk.buildId property was added, which allows to overwrite the default value (
sha1
) for the--build-id
linker flag.
Try it
Qbs is available for download on the download page.
Please report issues in our bug tracker.
Join our Discord server for live discussions.
You can use our mailing list for questions and discussions.
The documentation and wiki are also good places to get started.
Qbs is also available from a number of package repositories (Chocolatey, MacPorts, and Homebrew), and is updated on each release by the Qbs development team. It can also be installed through the native package management system on a number of Linux distributions. Please find a complete overview on repology.org.
Qbs 1.21.0 is also included in Qt Creator 6.0.0.
Contribute
If you are a happy user of Qbs, please tell others about it. But maybe you would like to contribute something. Everything that makes Qbs better is highly appreciated. Contributions may consist of reporting bugs or fixing them right away. But also new features are very welcome. Your patches will be automatically sanity-checked, built and verified on Linux, macOS and Windows by our CI bot.
Get started with instructions in the Qbs Wiki.
Thanks to everybody who made the 1.20 release happen:
- Christian Kandeler
- Christian Stenger
- Davide Pesavento
- Denis Shienkov
- Ivan Komissarov
- Kai Dohmen
- Orgad Shaneh
- Raphaël Cotty
- Richard Weickelt
- Thorbjørn Lindeijer
Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.8 Now!
Download the latest release here: www.qt.io/download.
Qt 6.8 release focuses on technology trends like spatial computing & XR, complex data visualization in 2D & 3D, and ARM-based development for desktop.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.