common-lisp
ASDF - 別のシステム定義機能
サーチ…
備考
ASDFは、Common Lispソフトウェアのシステムがどのようにコンポーネント(サブシステムとファイル)で構成されているか、これらのコンポーネントをコンパイル、ロード、テストなどのために正しい順序で操作する方法を指定するためのツールです。
フラットなディレクトリ構造を持つシンプルなASDFシステム
フラットなディレクトリ構造を持つこの単純なプロジェクトを考えてみましょう。
example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp
example.asd
ファイルは実際にASDF特有の関数呼び出しを少ししか持たない別のLispファイルです。プロジェクトがdrakma
およびclsql
システムに依存していると仮定すると、その内容は次のようになります。
(asdf:defsystem :example :description "a simple example project" :version "1.0" :author "TheAuthor" :depends-on (:clsql :drakma) :components ((:file "packages") (:file "tools" :depends-on ("packages")) (:file "functions" :depends-on ("packages")) (:file "main" :depends-on ("packages" "functions"))))
このLispファイルをロードすると、あなたは:example
システムについてASDFに指示しますが、システム自体はまだロードされていません。これは、 (asdf:require-system :example)
または(ql:quickload :example)
いずれかで行われます。
システムをロードすると、ASDFは次のことを行います。
- 依存関係をロードする - この場合は
clsql
システムのclsql
とdrakma
- 指定された依存関係に基づいてシステムのコンポーネント、つまりLispファイルをコンパイルしてロードする
- 最初に
packages
(依存関係なし) -
functions
後packages
(それだけに依存するpackages
)が、前にmain
(それに依存します) -
main
afterfunctions
(packages
とfunctions
依存functions
) -
packages
後のいつでもtools
- 最初に
心に留めておいてください:
- 必要に応じて依存関係を入力します(使用前にマクロ定義が必要です)。そうしないと、システムをロードするときにASDFがエラーになります。
- リストされたすべてのファイルは
.lisp
終わりますが、この.lisp
ファイルはasdfスクリプトにドロップする必要があります - あなたのシステムが
.asd
ファイルと同じ名前で、そのフォルダをquicklisp/local-projects/
フォルダに移動(またはシンボリックリンク)quicklisp/local-projects/
、(ql:quickload "example")
を使ってプロジェクトを読み込むことができます。 - あなたのシステムが依存しているライブラリは、
QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
(ASDF:*CENTRAL-REGISTRY
変数)またはQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
変数を介して、またはそのいずれかのQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
利用可能なQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
どちらかにQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
知らなければなりません。
システムのテスト操作を定義する方法
(in-package #:asdf-user)
(defsystem #:foo
:components ((:file "foo"))
:in-order-to ((asdf:test-op (asdf:load-op :foo)))
:perform (asdf:test-op (o c)
(uiop:symbol-call :foo-tests 'run-tests)))
(defsystem #:foo-tests
:name "foo-test"
:components ((:file "tests")))
;; Afterwards to run the tests we type in the REPL
(asdf:test-system :foo)
ノート:
- システムは、foo-testsが "FOO-TESTS"というパッケージを定義していると仮定しています 。
-
run-tests
はテストランナーのエントリーポイントです - uoip:symbol-callでは、まだ読み込まれていない関数を呼び出すメソッドを定義することができます。関数を定義したパッケージは、システムを定義するときには存在しません
私のASDFシステムをどのようなパッケージで定義する必要がありますか?
ASDFは、開発者がパッケージを定義するためのパッケージASDF-USER
を提供します。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow