概要
ASDF3でSBCL起動時のディレクトリ(カレントディレクトリ)以下にあるsystemを読み込む際の設定です。
.sbclrcを書き換える
.sbclrc
(require :asdf) ; quicklispの設定が既にある場合はこの行は不要です。
(asdf:initialize-source-registry
`(:source-registry (:tree ,*default-pathname-defaults*) :inherit-configuration))
試してみる
./stab/stab.asd
(in-package :cl-user)
(defpackage stab-asd
(:use :cl :asdf))
(in-package :stab-asd)
(defsystem stab
:depends-on ()
:components ((:module "src"
:components ((:file "stab")))))
./stab/src/stab.lisp
(defpackage stab
(:use :cl)
(:export :foo))
(in-package :stab)
(defun foo () (print "stab loaded"))
(in-package :cl-user)
sbclを.asdファイルがあるより上の階層のディレクトリで起動。
* (asdf:load-system :stab)
T
* (stab:foo)
"stab loaded"
"stab loaded"
*
補足
以前、SBCL + ASDF3 +QuickLispでプロジェクトの作り方
でカレントディレクトリのプロジェクトを見に行く方法を書きましたが、
これはASDF Manualによるとold styleなやり方なんだそうです。
本来は~/.config/common-lisp/source-registry.confに以下のように書けばいいらしいのですが
~/.config/common-lisp/source-registry.conf
(:source-registry
(:tree (:home "lisp")) ; ~/lisp/に展開される
:inherit-configuration)
これはなぜかASDFがsystemを見つけてくれず、うまくいきませんでした。