見出し画像

Qt開発環境をソースコードからビルド(ラズパイ5)

ユーザーインタフェースを含むアプリケーション開発環境の一つにQtがあります。ラズパイでもパッケージに含まれているので、パッケージでインストールことができます。

ですが、異なるバージョンのQtを使いたい場合も多々あったりするので、ここではソースコードから開発環境を構築(コンパイル&インストール)する手順を説明します。

Cross-Compile Qt 6 for Raspberry Piにもあるように、これまでは、ラズパイのQt開発環境の構築には、ラズパイとは別のPCを準備してそのPC上のクロス開発環境でコンパイルしたものをラズパイに転送するのが一般的でした。

ラズパイ5はそれなりのPCと同程度のデスクトップマシンとしての性能を持っていますので、別のPCを使ったクロス開発ではなく、ラズパイを直接使ったセルフ開発によってソースコードからQt開発環境を構築してみます。

Qtの現在のバージョンはQt6ですが、Qt5もまだ使われているので、Qt6とQt5、それとQtの統合開発環境(IDE)のQt Creatorを、ソースコードから構築します。


準備

はじめにQtをコンパイルするために必要なパッケージをインストールしておきます。必要となるパッケージはCross-Compile Qt 6 for Raspberry Piを参考にしました。

$ sudo apt install libboost-all-dev libudev-dev libinput-dev libts-dev libmtdev-dev libjpeg-dev libfontconfig1-dev libssl-dev libdbus-1-dev libglib2.0-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev libgles2-mesa-dev mesa-common-dev libasound2-dev libpulse-dev gstreamer1.0-omx-generic libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev  gstreamer1.0-alsa libvpx-dev libsrtp2-dev libsnappy-dev libnss3-dev "^libxcb.*" flex bison libxslt-dev ruby gperf libbz2-dev libcups2-dev libatkmm-1.6-dev libxi6 libxcomposite1 libfreetype6-dev libicu-dev libsqlite3-dev libxslt1-dev
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libx11-dev freetds-dev libsqlite3-dev libpq-dev libiodbc2-dev firebird-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev libxcb-xinerama0 libxcb-xinerama0-dev libatspi2.0-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxss-dev libxtst-dev libpci-dev libcap-dev libxrandr-dev libdirectfb-dev libaudio-dev libxkbcommon-x11-dev
$ sudo apt install make cmake build-essential libclang-dev clang ninja-build gcc git bison python3 gperf pkg-config libxfixes-dev libxcb-xkb-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

Qt6のqdocのコンパイルにはclangのバージョン15以上が必要なようなので下記もインストールしておきます。Qtのドキュメント(ヘルプ文章)が必要ない場合はqdocが無くても良いので、下記は入れなくても大丈夫です。

$ sudo apt install clang-15 clang-tools-15 libclang-15-dev libclang-common-15-dev libclang-cpp15-dev liblldb-15-dev libopencl-clang-15-dev

Qt5のインストール

Qtのダウンロードサイトからqt-everywhere-src-5.15.13.tar.xzをダウンロードします。ここではバージョン5.15.13を対象としましたが、異なるバージョンにしたい場合は、そのバージョンのソースコードをサイトからダウンロードしてください。

次に、下記の手順で、ソースコードの展開(tar)、設定(configure)、構築(make)、インストール(make install)します。

$ tar xvfJ qt-everywhere-src-5.15.13.tar.xz
$ cd qt-everywhere-src-5.15.13
$ mkdir build
$ cd build
$ ../configure -release -opengl desktop -nomake tests -xcb -xcb-xlib -skip qtwebengine -no-compile-examples -opensource -confirm-license 
$ make -j4
$ sudo make install

サンプルコード(examples)のソースコードをインストールしない場合は、configureで"-nomake examples"を追加すると、インストール先にexamplesがインストールされなくなります。
examplesがインストールされていると、QtCreatorの「ようこそ」にインストールされたサンプルが表示されるようになります。

また、Qt WebEngineのインストールはスキップする設定にしています。内部で使っているchromiumのコンパイルにPython2が必要なようなのですが、最新のラズパイOS(Debian bookworm)ではPython2は完全に削除されてしまっているようで、その環境構築が面倒になりそうなためです。

ヘルプをインストールする場合は、さらに以下を実行します。これをインストールすると、QtCreatorのヘルプが表示されるようになります。

$ make -j4 docs
$ sudo make install_docs

以上で、/usr/local/Qt-5.15.13にインストールされます。
インストール先を変更したい場合は、configureで、"-prefix インストール先のパス名"を追加すれば、指定したパスにインストールされます。

Qt6のインストール

Qtのダウンロードサイトからqt-everywhere-src-6.7.0.tar.xzをダウンロードします。ここではバージョン6.7.0を対象としましたが、異なるバージョンにしたい場合は、そのバージョンのソースコードをサイトからダウンロードしてください。

次に、下記の手順で、ソースコードの展開(tar)、設定(configure)、構築(cmake)、インストール(cmake --install)します。

$ tar xvfJ qt-everywhere-src-6.7.0.tar.xz
$ cd qt-everywhere-src-6.7.0
$ mkdir build
$ cd build
$ ../configure -release -opengl desktop -nomake tests -xcb -xcb-xlib -make examples -install-examples-sources -skip qtwebengine
$ cmake --build . --parallel 4
$ sudo cmake --install .

サンプルコード(examples)のソースコードをインストールしない場合は、configureで"-make examples -install-examples-sources"を削除ます(もし、インストールされてしまう場合は"-nomake examples"を付けてみてください)。

※Qt5ではデフォルトでexamplesがインストールされますが、Qt6ではデフォルトでexamplesがインストールされないように変わったようで、Qt6でexamplesがインストールされなくてずいぶん設定に迷ってしまいました。

また、Qt WebEngineのインストールはスキップする設定にしています。

ヘルプをインストールする場合は、さらに以下を実行してください。これをインストールすると、QtCreatorのヘルプが表示されるようになります。

$ cmake --build . --target docs --parallel 4
$ sudo cmake --install . --target install_docs

以上で、/usr/local/Qt-6.7.0にインストールされます。インストール先を変更したい場合は、configureで、"-prefix インストール先のパス名"を追加すれば、指定したパスにインストールされます。

環境変数の設定

インストールしたQtを有効にするために、PATHとLD_LIBRARY_PATHの2つの環境変数を設定します。

ログインシェルがBashの場合だと、ホームディレクトリの.bashrcに下記を追加すれば良いと思います。

export LD_LIBRARY_PATH=/usr/local/Qt-6.7.0/lib:/usr/local/Qt-5.15.13/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/Qt-6.7.0/bin:/usr/local/Qt-5.15.13/bin:$PATH

Qt Creatorのインストール

Qtのダウンロードサイトからqt-creator-opensource-src-13.0.0.tar.gzをダウンロードします。ここではバージョン13.0.0を対象としましたが、異なるバージョンにしたい場合は、そのバージョンのソースコードをサイトからダウンロードしてください。

次に、下記の手順で、ソースコードの展開(tar)、設定(cmake)、構築(make)、インストール(make install)します。

$ tar xvfz qt-creator-opensource-src-13.0.0.tar.gz
$ cd qt-creator-opensource-src-13.0.0
$ mkdir build
$ cd build
$ cmake ..
$ make -j 4
$ sudo make install

Fcitxプラグイン(日本語入力)

以上でQtの開発環境のインストールは完了なのですが、このままだと、Qt Creatorも、構築したQtアプリケーションも日本語の入力が受け付けられないようです。

そのためのFcitx用のプラグインモジュールをインストールします。

まずラズパイに下記のパッケージをインストールします。

$ sudo apt install extra-cmake-modules fcitx-libs-dev

次に、GitHubからfcitx-qt5のソースコードをダウンロード(clone)して、ビルドします。cmakeで"-DENABLE_QT6=ON"を付けることで、Qt5とQt6の両方ともにインストールされます。

$ git clone https://github.com/fcitx/fcitx-qt5.git
$ cd fcitx-qt5
$ mkdir build
$ cmake .. -DENABLE_QT6=ON
$ make
$ sudo make install

Qt Creatorの設定

Qt Creatorの起動はコンソールでqtcreatorと打てば実行されます。

$ qtcreator
Qt Creatorの起動画面

デフォルトではQt6の開発設定のみになっていると思いますのでQt5の設定をします。
メニューの「編集」-「Preferences」を選択すると設定のウインドウが開くきます。

「キット」のタブを開くと、「デスクトップ(既定)」が設定されていると思うので、「追加」を押して、下記のようにQt5の設定を追加し、「適用」を押します。

Qt5のキットの開発設定

デスクトップ(既定)の設定も、名前を「デスクトップ(Qt6)」などとしておくと、プログラムをビルドしたファイルを置くディレクトリ名にQt6が含まれるようになります(デフォルトのままだとunkownが付きます)。
また、私はコンパイラのC++の設定がClangになっていたので、GCCにしています。

Qt6のキットの設定

以上の設定で、Qt5でもQt6でも、サンプルをコンパイルしたり、自分のアプリケーションを作成したりできると思います。

この記事が気に入ったらサポートをしてみませんか?