はじめに
ECL(Embeddable Common Lisp)のQtバインディングであるEQL5(Embedded Qt Lisp)を導入してみたいと思います。
※ OSはUbuntu 17.10を使用しています。
※ 事前にECLをインストールしておいてください。
ECLは以下の記事を参考にインストールしてください。
* Embeddable Common Lisp導入メモ
Qt導入
QtのインストールにはQtの公式サイトでアカウント登録する必要があります。
QtダウンロードページからQtをダウンロードします。
バージョンは5.8以上なら良いと思います。
自分は5.9.1をダウンロードしました。
wget https://download.qt.io/archive/qt/5.9/5.9.1/qt-opensource-linux-x64-5.9.1.run
以下のコマンドで実行権限を与えます。
chmod u+x qt-opensource-linux-x64-5.9.1.run
インストーラを実行します。
./qt-opensource-linux-x64-5.9.1.run
後は画面に従ってインストールしてください。
途中、ユーザ名とパスワードを入力する箇所がありますが、そこではQtアカウント登録したときのものを入れてください。
自分の環境では上記だけではうまく行かなかったので、以下も実行しました。
sudo apt install qt-sdk
sudo apt install qttools5-dev qttools5-dev-tools
EQL5導入
EQL5のソースコード一式をダウンロード
git clone https://gitlab.com/eql/EQL5.git
ダウンロードしたEQL5の「src」ディレクトリに移動します。
cd ダウンロードしたディレクトリ/EQL5/src
以下のコマンドを実行します。
ecl -shell make
Makefile作成
qmake eql5.pro
コンパイル
make
ここで以下のようなエラーが出ますが、無視してもインストールはできました。
ここは後々調べていく予定です。
Project ERROR: Unknown module(s) in QT: multimedia multimediawidgets
Makefile:69: ターゲット 'sub-module_multimedia-pro-make_first' のレシピで失敗しました
make: *** [sub-module_multimedia-pro-make_first] エラー 3
インストール
sudo make install
コンパイル同様ここでも以下のエラーが出ますが、インストール自体は成功しました。
Project ERROR: Unknown module(s) in QT: multimedia multimediawidgets
Makefile:77: ターゲット 'sub-module_multimedia-pro-install_subtargets' のレシピで失敗しました
make: *** [sub-module_multimedia-pro-install_subtargets] エラー 3
無事インストールが成功していれば、以下のコマンドでバージョンが確認できます。
eql5 -v
サンプルプログラム実行
今回は「Sokoban」というサンプルプログラムを実行します。
以下のコマンドでサンプルプログラムのある場所に入ります。
(サンプルプログラムは/EQL5/examples/
ディレクトリ下にあります。)
cd EQL5をダウンロードしたディレクトリ/EQL5/examples/7-Sokoban
以下のコマンドで実行します。
eql5 eql-sokoban.lisp
以下、実行画面です。
空ウィンドウプログラム
空ウィンドウプログラムも一応記載しておきます。
test.lispという名前で以下のプログラムを作成
(in-package :eql-user)
(let ((window (qnew "QWidget"
"size" '(320 240)
"windowTitle" "Top-level widget")))
(|show| window))
以下のコマンドで実行
eql5 test.lisp
以下、実行中の様子。
最後に
Qtの導入が思った以上に難しかった・・・。
いや、単に初めて触ったから苦労しただけだったのか・・・?
とにかく、EQL5をインストールできてよかったです。
今回はデスクトップアプリケーションでしたが、EQL5にはAndroid開発もできるEQL5-Androidというものもあります。
今度はそっちを導入してみたいと思います。