#何の記事?
今回はタイトルどおりSBCL(Steel Bank Common Lisp)で単体実行可能なexeファイルを作ろう
という記事です。
#先に結論
では早速exeを作ってみます。
(load "foo.lisp") ; 必要なファイルをloadする
(sb-ext:save-lisp-and-die "foo.exe"
:toplevel #'main
:executable t)
sb-ext:save-lisp-and-die
はlispのコアイメージを書き出す関数です。
:executable t
を指定した場合、出力されるファイルはsbclのランタイムとコアイメージを含みます。
これで一応exeファイルを作成することができます。
#解説
sb-ext:save-lisp-and-die
にはいくつかのキーワード引数があります。
詳細についてはSBCLに公式サイトで確認できるので省きますが、
よく使いそうな引数については紹介しておきます。
;; トップレベルの関数を指定します。
;; (Cで言うとこのmain関数みたいなものです)
;; #'で関数自体を渡します。
:toplevel
;; trueならばイメージとランタイムを一緒にしたexeを出力します。
;; falseならイメージのみを出力し、ランタイムを含みません。(つまりexeにならない)
:executable
;; アプリケーションの種類を指定します。
;; :console ならば実行時にコンソールウインドウを表示します。
;; :gui ならばコンソールウインドウを表示しません。
:application-type
#まとめ
さあこれらの引数を指定してexeを出力すると、出力結果を見て悶絶することになるでしょう。
ファイルサイズでかすぎッッΣ(´□`;)
簡単なものでも40MB近くのサイズになります。
まぁランタイムを含んでるので当然っちゃ当然なんですが、これもう少し小さくならないかな???
#環境など
以下テストした環境。
- OS : Windows 10 64bit
- 処理系 : SBCL 1.2.15