I feel like there should be a simple way of doing this, but my googlefu is failing so I'd really appreciate some info on how to switch (or even permanently change) which version of Qt is used when doing qmake. If I ask which version I get the following:

~ $ qmake --version
QMake version 3.0
Using Qt version 5.0.1 in /usr/lib/x86_64-linux-gnu

I've install QtCreator, but I'm not sure where to go from here.

up vote 12 down vote accepted

This isn't necessarily Unix/Linux specific, so you are probably better asking this on Stack Overflow. Never the less, QtCreator is usually quite good at detecting alternative Qt installs, just create a new project and look under the Projects tab on the left. You can set different build configurations there. There should be a drop down box to select from the various installed versions for each configuration.

Otherwise, it seems to the QTDIR environmental variable is used to set the Qt version. By default QtCreator sets this to /usr/share/qt4 for me, so setting it to the equivalent path (ie the one where the configuration files are) should make qmake build with a different version. You could test with something like:

QTDIR=/usr/share/qtX qmake --version

It may also be possible to set this in the .pro file, but if so it is undocumented (as with quite a lot of qmake variables).

Also, if you want to build with a specific major version, qmake is usually just symlinked to a binary for the default major version. The real binaries are qmake-qt4, qmake-qt5 etc. Also see man qtchooser and the qtX-default packages on Debian based systems.

Update

There is a bug with qtchooser on Ubuntu 13.04 and 13.10 which seem to affect the way Qt applications detect different Qt versions, see https://bugs.launchpad.net/ubuntu/+source/qt4-x11/+bug/1177823. This may affect QtCreator also.

  • Thanks! I needed to use qmake-qt4 instead of the bald qmake - so easy, but I just couldn't find the info I needed. Thanks! – Tamsyn Michael Feb 22 '14 at 4:03
  • @TamsynMichael - Yes, on the linux side qmake in bin is just a symlink. So, if you used something like update-alternatives to switch back and forth, that might be ideal. It's not in update-alternatives, and things like the PyQt build scripts want a direct reference to the binary anyway - not a symlink. – RobotHumans Jan 27 '15 at 7:36

It helped me to use -qt=qt5 switch or QT_SELECT=qt5 environment variable.

$ qmake --version
QMake version 2.01a
Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu

$ qmake -qt=qt5 --version
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu

$ QT_SELECT=qt5 qmake --version
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu

There is a better method.

If you want to make your changes permanent, you need to modify the /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf file, which is a symlink to ../../../../share/qtchooser/qt4-x86_64-linux-gnu.conf.

Here is an example for my system (Ubuntu 17.10 x64, Qt 5.10.1). I would suggest to keep both original symlink file and its target in place (in case want to recover the original configuration). And also create the new files in the default locations (for consistency). So here are the steps:

Rename the symlink file:

sudo mv /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf_orig

Create a new target configuration file (with any name):

gksudo gedit /usr/share/qtchooser/my_Qt_5.10.1_Desktop_gcc_x64.conf

This file must contain two lines: the first line is the path to the Qt binaries (including qmake) and the second is the path to the Qt libraries (including .so files). In my case it will be:

<Qt_dir>/5.10.1/gcc_64/bin
<Qt_dir>/5.10.1/gcc_64/lib

Save it and close. Now create a symlink default.conf to the new configuration file:

ln -s /usr/share/qtchooser/my_Qt_5.10.1_Destop_gcc_x64.conf /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf

Check your Qt version:

qmake --version

Now it should always use the specified version!

Under some distros like Debian Jessie Stable you can do the follow :

sudo apt-get install -y qt4-qmake qt4-dev-tools
sudo update-alternatives --install "/usr/bin/qmake" "qmake" "/usr/bin/qmake-qt4" 40
sudo update-alternatives --config qmake

And just select the version you need if you need change again just run again the third line.

Many of the above answers will work. However I have personally found that none of them are persistent. E.g. I can run this command:

$ QT_SELECT=qt5 qmake --version
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib/x86_64-linux-gnu

But if I open a new terminal and check the Qt version it will revert to the default, and if you have multiple versions of Qt installed the default may not be the one you want. You can tell by running this command:

$ qtchooser -print-env
QT_SELECT="default"
QTTOOLDIR=...
QTLIBDIR=...

The only way to make your changes stick is to change the default version. To do this, edit /usr/lib/x86_64-linux-gnu/qtchooser/default.conf and change this line:

/usr/lib/x86_64-linux-gnu/qt5/bin

Where you change qt5 to whatever version you want. You can use the command qtchooser -list-versions to see what versions are installed on your machine.

In (my) default setup on Fedora 23 having both qt-3.3.8 and qt-4.8.5 environments it was also necessary to add the /usr/libxx/qt4/bin/ directory temporarily to the PATH to allow the cmake/qmake packages to find the right version. This was necessary when building the code, not when running the finished QT4 app.

For some reason the QT3 path already was installed there permanently and unfortunately at the start of the PATH, which prevented the QT version selector working properly.

qmake (/usr/bin/qmake) actually is just a symlink to qtchooser (/usr/bin/qtchooser).

Here is a quotation fromman qtchooser:

FILES
       /etc/xdg/qtchooser/default.conf
              System-wide  configuration  files. Each has two lines, the first
              is the path to the binaries and the second is the path to the Qt
              libraries.  If  a default.conf is provided, the settings from it
              will be automatically used in case nothing else is selected.

       $HOME/.config/qtchooser/*.conf
              User configuration files.

The file /etc/xdg/qtchooser/default.conf has higher priority than /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf. Here are the steps of how to choose the default Qt version for qmake on example of my system (Ubuntu 17.10 x64, Qt 5.10.1).

Create the /etc/xdg/qtchooser directory:

sudo mkdir /etc/xdg/qtchooser

Create and edit the configuration file:

gksudo gedit /etc/xdg/qtchooser/default.conf

As said above. this file must contain two lines: the first line is the path to the Qt binaries (including qmake) and the second is the path to the Qt libraries (including .so files). In my case it will be:

<Qt_dir>/5.10.1/gcc_64/bin
<Qt_dir>/5.10.1/gcc_64/lib

Save it and close. Now qmake should use the specified Qt version.

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.