LoginSignup
6
10

More than 5 years have passed since last update.

SBCL + ASDF3 +QuickLispでプロジェクトの作り方

Posted at

何の記事?

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がカレントディレクトリを見に行くように設定します。

~/.sbclrc
;;; 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を以下のように変更。

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を読み込みたければ以下のようにする。

foo/foo.asd
(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
6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10