¿Cómo cambio qué versión de Qt se usa para qmake?

31

Siento que debería haber una manera simple de hacer esto, pero mi googlefu está fallando, así que realmente agradecería alguna información sobre cómo cambiar (o incluso cambiar permanentemente) qué versión de Qt se usa al hacer qmake. Si pregunto qué versión obtengo lo siguiente:

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

He instalado QtCreator, pero no estoy seguro de a dónde ir desde aquí.

Tamsyn Michael
fuente

Respuestas:

16

Esto no es necesariamente específico de Unix / Linux, por lo que probablemente sea mejor preguntar esto en Stack Overflow. Sin embargo, QtCreator suele ser bastante bueno para detectar instalaciones Qt alternativas, solo cree un nuevo proyecto y mire debajo de la Projectspestaña a la izquierda. Puede establecer diferentes configuraciones de compilación allí. Debe haber un cuadro desplegable para seleccionar entre las diversas versiones instaladas para cada configuración.

De lo contrario, parece que la QTDIRvariable ambiental se utiliza para configurar la versión Qt. De manera predeterminada, QtCreator establece esto /usr/share/qt4para mí, por lo que establecerlo en la ruta equivalente (es decir, en la que están los archivos de configuración) debería hacer que qmake se compile con una versión diferente. Podrías probar con algo como:

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

También es posible configurar esto en el .proarchivo, pero si es así no está documentado (como ocurre con muchas qmakevariables).

Además, si desea compilar con una versión principal específica, qmakegeneralmente solo se vincula a un binario para la versión principal predeterminada. Los binarios reales son qmake-qt4, qmake-qt5etc. También vea man qtchoosery los qtX-defaultpaquetes en sistemas basados ​​en Debian.

Actualizar

Hay un error qtchooseren Ubuntu 13.04 y 13.10 que parece afectar la forma en que las aplicaciones Qt detectan diferentes versiones de Qt, consulte https://bugs.launchpad.net/ubuntu/+source/qt4-x11/+bug/1177823 . Esto también puede afectar a QtCreator.

Graeme
fuente
¡Gracias! Necesitaba usar qmake-qt4 en lugar del qmake calvo, muy fácil, pero no pude encontrar la información que necesitaba. ¡Gracias!
Tamsyn Michael
@TamsynMichael: Sí, en el lado de Linux, qmake in bin es solo un enlace simbólico. Entonces, si usó algo como alternativas de actualización para alternar, eso podría ser ideal. No está en alternativas de actualización, y cosas como los scripts de compilación PyQt quieren una referencia directa al binario de todos modos, no un enlace simbólico.
RobotHumans
13

Me ayudó a usar el -qt=qt5interruptor o QT_SELECT=qt5la variable de entorno.

$ 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
pevik
fuente
¿Qué pasa con las versiones menores y parche? ¿Cómo podemos seleccionar 5.9.4 o 5.11 sobre 5.12 explícitamente, por ejemplo?
DavidJ
4

Hay un mejor método .

Si desea que sus cambios sean permanentes, debe modificar el /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.confarchivo, que es un enlace simbólico ../../../../share/qtchooser/qt4-x86_64-linux-gnu.conf.

Aquí hay un ejemplo para mi sistema (Ubuntu 17.10 x64, Qt 5.10.1). Sugeriría mantener tanto el archivo de enlace simbólico original como su destino (en caso de que desee recuperar la configuración original). Y también cree los nuevos archivos en las ubicaciones predeterminadas (por coherencia). Así que aquí están los pasos:

Cambie el nombre del archivo de enlace simbólico:

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

Cree un nuevo archivo de configuración de destino (con cualquier nombre):

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

Este archivo debe contener dos líneas: la primera línea es la ruta a los binarios Qt (incluido qmake) y la segunda es la ruta a las bibliotecas Qt (incluidos los archivos .so). En mi caso es

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

Guárdalo y ciérralo. Cree un enlace simbólico default.confal nuevo archivo de configuración:

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

Verifique su versión Qt:

qmake --version

Ahora siempre debe usar la versión especificada.

vstepaniuk
fuente
2

Bajo algunas distribuciones como Debian Jessie Stable puedes hacer lo siguiente:

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

Y solo seleccione la versión que necesita si necesita cambiar nuevamente, simplemente ejecute nuevamente la tercera línea.

inukaze
fuente
2

Muchas de las respuestas anteriores funcionarán. Sin embargo, personalmente he descubierto que ninguno de ellos es persistente. Por ejemplo, puedo ejecutar este comando:

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

Pero si abro un nuevo terminal y verifico la versión de Qt, volverá a la predeterminada, y si tiene varias versiones de Qt instaladas, la predeterminada puede no ser la que desea. Puedes saber ejecutando este comando:

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

La única forma de hacer que sus cambios se mantengan es cambiar la versión predeterminada. Para hacer esto, edite /usr/lib/x86_64-linux-gnu/qtchooser/default.confy cambie esta línea:

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

Donde cambias qt5a la versión que quieras. Puede usar el comando qtchooser -list-versionspara ver qué versiones están instaladas en su máquina.

Mate
fuente
2

qmake( /usr/bin/qmake) en realidad es solo un enlace simbólico a qtchooser( /usr/bin/qtchooser).

Aquí hay una cita de man 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.

El archivo /etc/xdg/qtchooser/default.conftiene mayor prioridad que /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf. Estos son los pasos de cómo elegir la versión Qt predeterminada para, qmakepor ejemplo, mi sistema (Ubuntu 17.10 x64, Qt 5.10.1).

Crea el /etc/xdg/qtchooserdirectorio:

sudo mkdir /etc/xdg/qtchooser

Cree y edite el archivo de configuración:

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

Como se dijo anteriormente. este archivo debe contener dos líneas: la primera línea es la ruta a los binarios Qt (incluido qmake) y la segunda es la ruta a las bibliotecas Qt (incluidos los archivos .so). En mi caso será:

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

Guárdalo y ciérralo. Ahora qmakedebería usar la versión Qt especificada.

vstepaniuk
fuente
También funciona un enlace simbólico: sudo mkdir -p / etc / xdg / qtchooser && sudo ln -s /usr/share/qtchooser/qt5-x86_64-linux-gnu.conf /etc/xdg/qtchooser/default.conf
maharvey67
1
sudo apt-get install qt5-default

Si lo desea qt5, para su qt4uso:

sudo apt-get install qt4-default
JustProgrammingQuestions
fuente
+1, impresionante y simple, lástima que esta respuesta fuera tan baja en la página
jpa
0

En (mi) configuración predeterminada en Fedora 23 con ambos qt-3.3.8y qt-4.8.5entornos, también era necesario agregar /usr/libxx/qt4/bin/temporalmente el directorio al PATHpara permitir que los paquetes cmake/ qmakeencuentren la versión correcta. Esto era necesario al compilar el código, no al ejecutar la aplicación QT4 finalizada.

Por alguna razón, la ruta QT3 ya estaba instalada allí de forma permanente y desafortunadamente al comienzo de la PATH, lo que impidió que el selector de versiones QT funcionara correctamente.

Gunnar
fuente