common-lisp
Qt
ECL

Embeddable Common LispとQt5でGUIアプリケーション〜開発環境構築〜

はじめに

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

Screenshot from 2018-01-13 10-29-04.png

サンプルプログラム実行

今回は「Sokoban」というサンプルプログラムを実行します。
以下のコマンドでサンプルプログラムのある場所に入ります。
(サンプルプログラムは/EQL5/examples/ディレクトリ下にあります。)

cd EQL5をダウンロードしたディレクトリ/EQL5/examples/7-Sokoban

以下のコマンドで実行します。

eql5 eql-sokoban.lisp

以下、実行画面です。

Screenshot from 2018-01-13 00-28-02.png

空ウィンドウプログラム

空ウィンドウプログラムも一応記載しておきます。

test.lispという名前で以下のプログラムを作成

test.lisp
(in-package :eql-user)

(let ((window (qnew "QWidget"
                    "size" '(320 240)
                    "windowTitle" "Top-level widget")))
  (|show| window))

以下のコマンドで実行

eql5 test.lisp

以下、実行中の様子。

Screenshot from 2018-01-13 13-54-15.png

最後に

Qtの導入が思った以上に難しかった・・・。
いや、単に初めて触ったから苦労しただけだったのか・・・?
とにかく、EQL5をインストールできてよかったです。

今回はデスクトップアプリケーションでしたが、EQL5にはAndroid開発もできるEQL5-Androidというものもあります。
今度はそっちを導入してみたいと思います。