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 파일을로드 할 때 ASDF에게 your :example
시스템에 대해 알려주지 만 아직 시스템 자체를로드하지는 않습니다. 이것은 (asdf:require-system :example)
또는 (ql:quickload :example)
됩니다.
그리고 시스템을로드하면 ASDF는 다음을 수행합니다.
- 종속성로드 -이 경우 ASDF 시스템 인
clsql
및drakma
- 주어진 종속물을 기반으로 시스템의 구성 요소, 즉 Lisp 파일을 컴파일하고 적재 하십시오.
-
packages
우선 (의존성 없음) -
packages
이후의functions
(packages
에만 의존하기 때문에),main
(packages
의존하기 때문에) -
main
afterfunctions
(packages
와functions
에 의존 함) -
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