Qbs (pronounced “Cubes”) is The Qt Company’s latest build tool, which aims to be the replacement for qmake in the Qt build system. In addition to its use within Qt, for our customers Qbs will also provide faster build times coupled with a rich feature set in order to reduce build engineering complexity and decrease time to market.
Today I'm excited to introduce you to the latest release of Qbs - 1.10.
This release focuses on bug fixing and general enhancements, specifically to the Qbs language.
Profiles can now be defined dynamically in a project using the new Profile language item. This is useful for when a project has specific, well-known requirements regarding the build environment and/or target platform.
Group nesting now works more naturally with respect to prefixes. If a Group does not define the prefix property, its value will be taken from the parent group (and so on until a prefix is found or the product level is reached).
Modules and file taggers may now set priority levels. This allows Qbs to disambiguate between multiple implementations of the same module whose conditions evaluate to true, or multiple file taggers that would tag the same files - essentially, a conflict resolution mechanism. Simply set the priority property of a Module or FileTagger to an integer value greater than zero. The instance with the highest value wins. For example, Qbs uses this to choose the cpp module implementation on different platforms. Because the Android implementation is a superset of the Linux implementation, both the Linux and Android implementations are available on Android, but because the latter has a higher priority level, that implementation gets chosen.
It is now possible to add file tags to generated artifacts by setting the new fileTags property in a group that has a fileTagsFilter. This allows you to "append" to the list of file tags assigned to artifacts created by a rule that is defined in a module which is outside your control.
Another big focus of this release was enhancing the documentation (and even more significant changes in this area will come with Qbs 1.11).
To start with, we've added two new major pages. The first is a qmake porting guide, which contains an overview of various qmake variables and how to achieve the same functionality in Qbs. The second is a "how-to" page on how to create modules for third party libraries. We plan to have many more of these "how-to" style guides showing how to solve common build system problems with Qbs.
We also added in-depth descriptions of all command line tools and their respective options, and a man page for the qbs command line tool.
This release adds a few notable platform-specific features: initial support for the Universal Windows Platform, and the run command can now deploy and run Android apps on devices, and deploy and run iOS and tvOS apps on the simulator.
This release adds support for the Qt Quick compiler and for qmlcachegen.
Other New Features
The TextFile service can now append to existing files using the new TextFile.Append open mode.
Process and TextFile objects in rules, commands and configure scripts are now closed automatically after script execution.
Added the vcs module to provide VCS repository information. Git and Subversion are supported initially.
Added the cpufeatures module for abstracting compiler flags related to CPU features such as SSE.
Added property cpp.discardUnusedData abstracting linker options that strip unneeded symbols or sections.
Added property cpp.variantSuffix for making binary names unique when multiplexing products.
Added property cpp.compilerDefinesByLanguage providing the compiler's pre-defined macros.
Added new command line sub-command list-products which lists the names of the products available in the project.