UNIXのlsコマンド風なものをCommon Lispで実装する手順を例にメモっておく。
環境は、Windows7+SBCL
1. とりあえず、REPLでも何でもよいので実行する処理を記述する。
ls.lisp
(defun ls-current () (loop for i in (directory (make-pathname :type :wild :name :wild :defaults (truename "./"))) do (format t "~a~%" i)))
2. SBCLを単体で起動する。
c:\> set HOME=c:\emacs\home c:\> set SBCL_HOME=C:\Program Files (x86)\Steel Bank Common Lisp\1.0.37\ c:\> sbcl sbcl*
3.ソースをロードする
sbcl* (load "c:/emacs/clisp/ls.lisp") T
4.実行テスト
sbcl* (ls-current) c:\$Recycle.Bin\ c:\Documents and Settings\ c:\MSOCache\ . . .
5.コンパイルする
sbcl* (save-lisp-and-die "ls.exe" :toplevel 'ls-current :executable t :purify t):toplevel バイナリを実行するときに最初に実行する関数を指定する。
:executable tを指定すると、作成するバイナリを実行可能にする
:purify tを指定すると、動的オブジェクトを静的オブジェクトに変換する(x86系では意味ないらしい?)
参考>> Common Lisp クックブック 「現在のメモリイメージを再利用する」
c:> dir ls.exe 2011/01/10 12:32 31,703,064 ls.exe c:> ls.exe This is experimental prerelease support for the Windows platform: use at your own risk. "Your Kitten of Death awaits!" c:\$Recycle.Bin\ c:\Documents and Settings\ c:\MSOCache\ c:\NVIDIA\ c:\PerfLogs\ c:\Program Files (x86)\ c:\Program Files\ c:\ProgramData\ c:\Recovery\ c:\System Volume Information\ c:\Users\ c:\Windows\ c:\emacs\ c:\hiberfil.sys c:\ntbackup\ c:\pagefile.sys c:\temp\わかっちゃえば簡単だった。 作成したバイナリが他のライブラリ(dllとかsoとか)を使っている場合は、環境変数PATHに設定しておけば動かせるっぽい。
0 件のコメント:
コメントを投稿