Next: , Previous: , Up: defsystemでシステムを定義する   [Contents][Index]


6.2 複雑な例

defsystemのより複雑な使い方を説明するために、いくぶん込み入った例を挙げてみましょう。

(in-package :asdf-user)

(defsystem "foo"
  :version (:read-file-form "variables" :at (3 2))
  :components
  ((:file "package")
   (:file "variables" :depends-on ("package"))
   (:module "mod"
     :depends-on ("package")
     :serial t
     :components ((:file "utils")
                  (:file "reader")
                  (:file "cooker")
                  (:static-file "data.raw"))
     :output-files (compile-op (o c) (list "data.cooked"))
     :perform (compile-op :after (o c)
        (cook-data
         :in (component-pathname (find-component c "data.raw"))
         :out (first (output-files o c)))))
   (:file "foo" :depends-on ("mod"))))

(defmethod action-description
    ((o compile-op) (c (eql (find-component "foo" "mod"))))
  "cooking data")

それでは例を説明していきます。


Footnotes

(14)

ASDF 1、2(バージョン2.26まで)は、各.asdファイルに対してasdfNという一時的なパッケージを作っては削除していました。これは名前の衝突を減らすための仕様でしたが、目的にかなってもいなかったし、ものごとを複雑にしただけでした。ASDF 3は単に共通のパッケージであるasdf-userを使い、シンボル衝突の回避はCommon Lispの慣習に委ねます。asdf-userパッケージの特筆すべき点は、uiop/common-lispuseしていることです。このパッケージはcommon-lispパッケージのすべてのシンボルを再エクスポートしていて、いくつかのCommon Lisp処理系のANSI CL違反の挙動が修正されています。しかし、Corman Lisp、GCL、Genera、MCLを使っているのでなければ、この点を気にするべきではありません。