수색…


비고

ASDF - 다른 시스템 정의 기능

ASDF는 Common Lisp 소프트웨어의 시스템이 구성 요소 (하위 시스템 및 파일)로 구성되는 방법과 올바른 순서로 이러한 구성 요소를 조작하여 컴파일,로드, 테스트 등을 수행하는 방법을 지정하기위한 도구입니다.

플랫 디렉토리 구조의 간단한 ASDF 시스템

플랫 디렉토리 구조를 가진이 간단한 프로젝트를 생각해보십시오 :

example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp

example.asd 파일은 실제로는 ASDF 전용 함수 호출을 제외한 다른 Lisp 파일입니다. 프로젝트가 drakmaclsql 시스템에 의존한다고 가정하면 그 내용은 다음과 같습니다.

(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 파일을로드 할 때 ASDF에게 your :example 시스템에 대해 알려주지 만 아직 시스템 자체를로드하지는 않습니다. 이것은 (asdf:require-system :example) 또는 (ql:quickload :example) 됩니다.

그리고 시스템을로드하면 ASDF는 다음을 수행합니다.

  1. 종속성로드 -이 경우 ASDF 시스템 인 clsqldrakma
  2. 주어진 종속물을 기반으로 시스템의 구성 요소, 즉 Lisp 파일을 컴파일하고 적재 하십시오.
    1. packages 우선 (의존성 없음)
    2. packages 이후의 functions ( packages 에만 의존하기 때문에), main ( packages 의존하기 때문에)
    3. main after functions ( packagesfunctions 에 의존 함)
    4. packages 후 언제든지 tools packages

유의 사항 :

  • 의존성을 필요에 따라 입력하십시오 (예 : 사용 전에 매크로 정의가 필요함). 그렇지 않으면 시스템을로드 할 때 ASDF 오류가 발생합니다.
  • 나열된 모든 파일은 .lisp 는 asdf 스크립트에 없어야합니다.
  • 시스템 이름이 .asd 파일과 동일하고 폴더를 quicklisp/local-projects/ 폴더로 이동 (또는 심볼릭 링크) 한 경우 (ql:quickload "example") 사용하여 프로젝트를로드 할 수 있습니다.
  • 시스템이 의존하는 라이브러리는 ASDF ( ASDF:*CENTRAL-REGISTRY 변수를 통해) 또는 QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES* 변수를 통해 또는 해당 QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES* 사용 가능)를 통해 ASDF에 알려 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