Skip to content

Vertexwahn/rules_qt6

Repository files navigation

Support Ukraine

Bazel rules for Qt6

Goal

The goal of these rules is to be able to build Qt6 applications using Bazel on Windows, Linux and macOS without the need to preinstall Qt6. All the magic to set up Qt6 should be done by Bazel with as little effort as possible.

Quick start

This project uses Bazel as a build system. The current used version of Bazel is defined in .bazelversion.

Prerequisites:

The following tools should be installed:

  • Git
  • Bazel
  • A C++ compiler (GCC, Visual Studio, Clang, etc.)

Checkout, build, and run:

All platforms:

git clone https://github.com/Vertexwahn/rules_qt6 &&
cd rules_qt6/tests

Run Hello World demo with Windows 10/11 x64 with Visual Studio 2019:

bazel run --config=vs2019 //hello_world:hello_world

Run Hello World demo with Windows 10/11 x64 with Visual Studio 2022:

bazel run --config=vs2022 //hello_world:hello_world

Run Hello World demo with Ubuntu 20.04:

bazel run --config=gcc9 //hello_world:hello_world

Run Hello World demo with Ubuntu 22.04:

bazel run --config=gcc11 //hello_world:hello_world

Run Hello World demo with macOS 11/12:

# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install qt@6 # Unfortunately a preinstalled version of Qt6 is still needed on macOS 
brew link qt@6
bazel run --config=macos //hello_world:hello_world

Expected output

The expected output should be similar (depending on your platform) to the following screenshots:

Windows

Screenshot of HelloWorld demo on Windows 11

Ubuntu

Screenshot of HelloWorld demo on Ubuntu 22.04

macOS

Screenshot of HelloWorld demo on macOS

More Examples

More examples can be found in the tests directory.

Current status

Currently, on macOS, these rules need a preinstalled version of Qt on the system (brew install qt@6 && brew link qt@6). On Windows and Linux it should be possible to run bazel run --config=[gcc9|gcc11|vs2019|vs2022] //hello_world:hello_world without the need to preinstall Bazel.

These rules require at least Bazel 4.0.0 to work. With some small modifications, you can get work these rules also on earlier versions of Bazel.

A prebuild version of Qt is fetched from vertexwahn.de. Implementation details can be found in fetch_qt.bzl.

I created a .bazelrc file that contains a config for vs2019, vs2022, gcc9, gcc11, and ``macos`. This is needed since Qt6 needs at least C++17 standard enabled and different C++ compilers need different flags to enable this.

Contributions

Any improvements to the Qt6 build experience using Bazel are welcome. Maybe you have solved this problem already. In this case, I would appreciate it if you could share your efforts under some permissive license. If you name no specific license I assume you are fine with the current used license of this project (Apache 2.0 License).

Similar projects

License

This work is published under Apache 2.0 License.

This work builds on top of justbuchanan/bazel_rules_qt which is also licensed under Apache 2.0 and was forked from bbreslauer/qt-bazel-example. See here for details: https://github.com/justbuchanan/bazel_rules_qt/graphs/contributors

Thanks to all contributors ❤