32

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.

10 Answers 10

17

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.

2
  • 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! Feb 22, 2014 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. Jan 27, 2015 at 7:36
15

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
1
  • 1
    What about the minor & patch versions? How can we select 5.9.4 or 5.11 over 5.12 explicitly, for example?
    – DavidJ
    Mar 28, 2019 at 19:35
11

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 you 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 is

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

Save it and close it. 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.

5
sudo apt-get install qt5-default

If you'd like qt5, for qt4 use:

sudo apt-get install qt4-default
0
3

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.

3

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.

3

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.

1
  • A symlink also works: sudo mkdir -p /etc/xdg/qtchooser && sudo ln -s /usr/share/qtchooser/qt5-x86_64-linux-gnu.conf /etc/xdg/qtchooser/default.conf
    – Alcamtar
    Feb 14, 2019 at 20:11
1

vstepaniuk has a helpful description of how to configure qtchooser to use your built-from-source Qt as the system default.

I found in Ubuntu20.04 that I also had to set the user default before my qmake would default to the new version. Do that by creating the link:

ln -s /usr/share/qtchooser/MyQt.conf $HOME/.config/qtchooser/default.conf

As above, the MyQt.conf file contains pointers to the bin and lib folders of your Qt build, mine looks like:

/opt/Qt5.12.11/bin
/opt/Qt5.12.11/lib

As above, test your qtchooser configuration with the command:

qmake --version

When I failed, I still saw the system defaults, but on success I saw:

QMake version 3.1
Using Qt version 5.12.11 in /opt/Qt5.12.11/lib

I found this reference helpful: https://www.systutorials.com/docs/linux/man/1-qtchooser/

0

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.

0

Assuming the Qt5 path is:

/opt/Qt5.12.11/5.12.11/bin

It may differ in your system. I did the following step in the terminal: export PATH=/opt/Qt5.12.11/5.12.11/bin/:$PATH

then open QtCreator again. Also, you may need to change the project folder to another arbitrary path.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .