QMake¶
Much like Autotools and CMake, QMake is a build-script generator designed by the developers of Qt.
In its simplest form, Spack’s QMakePackage runs the following steps:
$ qmake
$ make
$ make check # optional
$ make install
QMake does not appear to have a standardized way of specifying the installation directory, so you may have to set environment variables or edit *.pro files to get things working properly.
QMake packages will depend on the virtual qmake package which is provided by multiple versions of Qt: qt provides Qt up to Qt5, and qt-base provides Qt from version Qt6 onwards.
This split was motivated by the desire to split the single Qt package into its components to allow for more fine-grained installation.
To depend on a specific version, refer to the documentation on Virtual dependencies.
Phases¶
The QMakeBuilder and QMakePackage base classes come with the following phases:
qmake- generate Makefilesbuild- build the projectinstall- install the project
By default, these phases run:
$ qmake
$ make
$ make install
Any of these phases can be overridden in your package as necessary.
There is also a check method that looks for a check target in the Makefile.
If a check target exists and the user runs:
$ spack install --test=root <qmake-package>
Spack will run make check after the build phase.
Important files¶
Packages that use the QMake build system can be identified by the presence of a <project-name>.pro file.
This file declares things like build instructions and dependencies.
One thing to look for is the minQtVersion function:
minQtVersion(5, 6, 0)
This means that Qt 5.6.0 is the earliest release that will work.
You should specify this in a depends_on statement.
Build system dependencies¶
At the bare minimum, packages that use the QMake build system need a qt dependency.
Since this is always the case, the QMakePackage base class already contains:
depends_on("qt", type="build")
If you want to specify a particular version requirement, or need to link to the qt libraries, you can override this in your package:
depends_on("qt@5.6.0:")
Passing arguments to qmake¶
If you need to pass any arguments to the qmake call, you can override the qmake_args method like so:
def qmake_args(self):
return ["-recursive"]
This method can be used to pass flags as well as variables.
*.pro file in a sub-directory¶
If the *.pro file used to tell QMake how to build the package is found in a sub-directory, you can tell Spack to run all phases in this sub-directory by adding the following to the package:
build_directory = "src"
External documentation¶
For more information on the QMake build system, see: http://doc.qt.io/qt-5/qmake-manual.html