Jak zmienić wersję Qt używaną do qmake?

31

Wydaje mi się, że powinien istnieć prosty sposób na zrobienie tego, ale mój googlefu zawodzi, więc naprawdę doceniam informacje o tym, jak przełączyć (a nawet trwale zmienić), która wersja Qt jest używana podczas wykonywania qmake. Jeśli zapytam, która wersja otrzymuję:

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

Zainstalowałem QtCreator, ale nie jestem pewien, dokąd się udać.

Tamsyn Michael
źródło

Odpowiedzi:

16

Niekoniecznie jest to specyficzne dla Uniksa / Linuksa, więc prawdopodobnie lepiej jest zapytać o to w przypadku przepełnienia stosu. Niemniej jednak QtCreator jest zwykle całkiem dobry w wykrywaniu alternatywnych instalacji Qt, wystarczy utworzyć nowy projekt i zajrzeć pod Projectszakładkę po lewej stronie. Można tam ustawić różne konfiguracje kompilacji. Powinno być rozwijane pole do wyboru różnych zainstalowanych wersji dla każdej konfiguracji.

W przeciwnym razie wydaje się, że QTDIRzmienna środowiskowa służy do ustawienia wersji Qt. Domyślnie QtCreator ustawia to /usr/share/qt4dla mnie, więc ustawienie go na równoważną ścieżkę (tj. Ścieżkę, w której znajdują się pliki konfiguracyjne) powinno sprawić, że qmake będzie budował inną wersję. Możesz przetestować za pomocą czegoś takiego:

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

Możliwe jest również ustawienie tego w .propliku, ale jeśli tak, to nie jest to udokumentowane (jak w przypadku wielu qmakezmiennych).

Ponadto, jeśli chcesz budować z określoną wersją główną, qmakezwykle jest ona po prostu dowiązana symbolicznie do pliku binarnego dla domyślnej wersji głównej. Pliki binarne są prawdziwe qmake-qt4, qmake-qt5itd. Patrz także man qtchooseri qtX-defaultpakietów w systemach opartych Debiana.

Aktualizacja

W qtchooserUbuntu 13.04 i 13.10 występuje błąd, który wydaje się wpływać na sposób, w jaki aplikacje Qt wykrywają różne wersje Qt, patrz https://bugs.launchpad.net/ubuntu/+source/qt4-x11/+bug/1177823 . Może to również wpłynąć na QtCreator.

Graeme
źródło
Dzięki! Musiałem użyć qmake-qt4 zamiast łysego qmake - to takie proste, ale po prostu nie mogłem znaleźć potrzebnych informacji. Dzięki!
Tamsyn Michael
@TamsynMichael - Tak, po stronie linux qmake w bin jest tylko dowiązaniem symbolicznym. Tak więc, jeśli użyłeś czegoś takiego jak alternatywy aktualizacji do przełączania się tam iz powrotem, może to być idealne. Nie ma go w alternatywach aktualizacji, a skrypty kompilacji PyQt i tak chcą bezpośredniego odniesienia do pliku binarnego - a nie dowiązania symbolicznego.
RobotHumans
13

Pomogło mi to użyć -qt=qt5przełącznika lub QT_SELECT=qt5zmiennej środowiskowej.

$ 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
źródło
Co z wersjami drobnymi i łatkami? Jak możemy na przykład wyraźnie wybrać 5.9.4 lub 5.11 zamiast 5.12?
DavidJ
4

Jest lepsza metoda .

Jeśli chcesz, aby zmiany były trwałe, musisz zmodyfikować /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.confplik, który jest dowiązaniem symbolicznym ../../../../share/qtchooser/qt4-x86_64-linux-gnu.conf.

Oto przykład mojego systemu (Ubuntu 17.10 x64, Qt 5.10.1). Proponuję zachować zarówno oryginalny plik dowiązania symbolicznego, jak i jego cel na miejscu (na wypadek, gdybyś chciał odzyskać oryginalną konfigurację). A także utwórz nowe pliki w domyślnych lokalizacjach (dla zachowania spójności). Oto kroki:

Zmień nazwę pliku dowiązania symbolicznego:

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

Utwórz nowy docelowy plik konfiguracyjny (o dowolnej nazwie):

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

Ten plik musi zawierać dwa wiersze: pierwszy wiersz to ścieżka do plików binarnych Qt (w tym qmake), a drugi to ścieżka do bibliotek Qt (w tym plików .so). W moim przypadku tak jest

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

Zapisz i zamknij. Utwórz dowiązanie symboliczne default.confdo nowego pliku konfiguracyjnego:

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

Sprawdź swoją wersję Qt:

qmake --version

Teraz powinien zawsze używać określonej wersji.

vstepaniuk
źródło
2

W niektórych dystrybucjach, takich jak Debian Jessie Stable, możesz wykonać następujące czynności:

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

I po prostu wybierz potrzebną wersję, jeśli potrzebujesz zmiany, po prostu uruchom ponownie trzecią linię.

inukaze
źródło
2

Wiele z powyższych odpowiedzi zadziała. Jednak osobiście odkryłem, że żaden z nich nie jest uparty. Np. Mogę uruchomić to polecenie:

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

Ale jeśli otworzę nowy terminal i sprawdzę wersję Qt, nastąpi powrót do domyślnej, a jeśli masz zainstalowanych wiele wersji Qt, domyślna może nie być ta, którą chcesz. Możesz powiedzieć, uruchamiając to polecenie:

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

Jedynym sposobem, aby wprowadzić zmiany, jest zmiana domyślnej wersji. Aby to zrobić, edytuj /usr/lib/x86_64-linux-gnu/qtchooser/default.confi zmień ten wiersz:

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

Gdzie zmieniasz qt5na dowolną wersję, którą chcesz. Możesz użyć tego polecenia, qtchooser -list-versionsaby zobaczyć, jakie wersje są zainstalowane na twoim komputerze.

Matt
źródło
2

qmake( /usr/bin/qmake) w rzeczywistości jest tylko dowiązaniem symbolicznym do qtchooser( /usr/bin/qtchooser).

Oto cytat z 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.

Plik /etc/xdg/qtchooser/default.confma wyższy priorytet niż /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf. Oto kroki, jak wybrać domyślną wersję Qt qmakena przykładzie mojego systemu (Ubuntu 17.10 x64, Qt 5.10.1).

Utwórz /etc/xdg/qtchooserkatalog:

sudo mkdir /etc/xdg/qtchooser

Utwórz i edytuj plik konfiguracyjny:

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

Jak powiedziano powyżej. ten plik musi zawierać dwa wiersze: pierwszy wiersz jest ścieżką do plików binarnych Qt (w tym qmake), a drugi to ścieżka do bibliotek Qt (w tym plików .so). W moim przypadku będzie to:

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

Zapisz i zamknij. Teraz qmakenależy użyć określonej wersji Qt.

vstepaniuk
źródło
Działa także symlink: 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

Jeśli chcesz qt5, do qt4użytku:

sudo apt-get install qt4-default
JustProgrammingQuestions
źródło
+1, niesamowite i proste, szkoda, że ​​odpowiedź była tak niska na stronie
jpa
0

W (moim) domyślnym ustawieniu Fedory 23 zawierającym oba środowiska qt-3.3.8i qt-4.8.5środowiska konieczne było również /usr/libxx/qt4/bin/tymczasowe dodanie katalogu do, PATHaby umożliwić pakietom cmake/ qmakeznalezienie właściwej wersji. Było to konieczne podczas budowania kodu, a nie podczas uruchamiania gotowej aplikacji QT4.

Z jakiegoś powodu ścieżka QT3 została już tam zainstalowana na stałe i niestety na początku PATH, co uniemożliwiło poprawne działanie selektora wersji QT.

Gunnar
źródło