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의존하기 때문에) -
mainafterfunctions(packages와functions에 의존 함) -
packages후 언제든지toolspackages
-
유의 사항 :
- 의존성을 필요에 따라 입력하십시오 (예 : 사용 전에 매크로 정의가 필요함). 그렇지 않으면 시스템을로드 할 때 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