何の記事?
SBCL(Steel Bank Common Lisp)でASDF3 (Another System Definition Facility) と
QuickLispを使ってプロジェクトの作り方からロードの仕方までを簡単に説明します。
プロジェクトの作成にはQuickLispからインストールするcl-projectを使います。
プロジェクトを作る
QuickLispのインストール
QuickLispのWebサイトからquicklisp.lispをダウンロードして
REPLで以下を実行します。
(load "quicklisp.lisp")
(quicklisp-quickstart:install)
(ql:add-to-init-file)
cl-projectのインストール
REPLで以下を実行します。
(ql:quickload :cl-project)
cl-projectでプロジェクト作成
REPLで以下を実行します。
カレントディレクトリのfoo/にプロジェクトのフォルダができます。
(ql:quickload :cl-project)
(cl-project:make-project #p"foo/")
.sbclrcの設定
SBCLでASDFがカレントディレクトリを見に行くように設定します。
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
(user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
;; ここから
(setf asdf:*central-registry*
'(*default-pathname-defaults*))
;; ここまでを追加
ASDFでロード
REPLで以下を実行すると作成したプロジェクトをロードすることができます。
(asdf:operate 'asdf:load-op 'foo)
試してみる
プロジェクトfooを作成して、foo/src/foo.lispを以下のように変更。
(in-package :cl-user)
(defpackage foo
(:use :cl)
(:export :hello))
(in-package :foo)
(defun hello () (print "hello ASDF!"))
プロジェクトのフォルダをカレントディレクトリにして、
REPLで以下のように実行する。
(カレントディレクトリ以下を再帰的に探索してくれるらしいので、
プロジェクトのフォルダより上の階層ならどこでもいいはず。)
(asdf:operate 'asdf:load-op 'foo)
プロジェクトが読み込まれるので、ここで
* (foo:hello)
"hello ASDF!"
"hello ASDF!"
となれば成功。
いくつかのファイルをロードする必要があるときは、foo/foo.asdファイルを変更する。
foo/src/bar.lispを読み込みたければ以下のようにする。
(defsystem foo
:version "0.1"
:author ""
:license ""
:depends-on ()
:components ((:module "src"
:components
;; ここに必要なファイルを追加していく。
((:file "foo")
(:file "bar")))))
.....
環境
- OS : Windows 10 x64
- 処理系 : Steel Bank Common Lisp 1.3.7