커먼리습 설정하기, ASDF 시스템 코드를 받기
1. ASDF을 최신 버젼으로 설정한다
(이부분에서 많이 고생했는데) SBCL와 다르게 CLISP, ECL 은 최신 버젼의 ASDF을 내장한걸 패키징해놓지 않았다.
대부분은 문제가 없이 동작하지만, 내가 작성한 커먼리습 시스템에서 실행파일을 빌드할 때 문제가 많았다.
- ASDF 의 최신 버젼을
git clone
해서 적당한 디렉토리에 받는다. make
을 내려받은 ASDF 디렉토리에서 실행한다.- 실행하면
build/asdf.lisp
파일으로 한 파일으로 뭉쳐서 로딩하게 편안한 파일을 생성해준다.
- 실행하면
- 내 커먼리습 구현체의 시작설정파일 맨 앞에 다음처럼 추가한다.
(load "~/local/asdf/build/asdf")
- 여기서 나는
$HOME/local/asdf/
에 ASDF을 받았다고 가정. - 그리고
asdf.lisp
파일이더라도, 마지막에.lisp
확장자는 생략했다.
- 여기서 나는
- ECL은
$HOME/.eclrc
- CLISP은
$HOME/.clisprc.lisp
- 그리고 중요한데, 그 다음에
Quicklisp 초기화 내용이 오도록
한다.
- Quicklisp을 초기화하기 전에 ASDF 최신 버젼이 로딩되어 있는게 더 나을테니까.
- 어차피 위의 (1~3)의 순서대로 ASDF 먼저 설정한 다음에
Quicklisp설치한 다음에
ql:add-to-init-file
실행하면 이런 순서로 추가해준다.
…별거 아닌데, 이거 때문에 빌드한 결과 실행파일이 이상해서 좀 고생했다.
참고: https://github.com/ageldama/cl-state-machine/blob/master/build-tamagochi-exec-ecl.sh
2. ASDF 로딩하는 디렉토리를 알거나, 설정한다
예전에도 언급한 내용이다.
- ASDF 매뉴얼에서 나오는 항목들을 잘 읽어본다:
- 내 마음에 드는 위치에서 로딩하도록 설정하거나, 기본값으로 어디에서 로딩하는지 이해한다.
3. 처음 받은 ASDF시스템은 Quicklisp으로 로딩한다
조금 이상하다고 생각하는 부분.
처음으로 asdf 시스템인 프로젝트를 체크아웃 받아서 로딩하거나 테스트를 실행할 때,
(asdf:load-system :foobar)
와 같이 로딩하려 하지말고,
(ql:quickload :foobar)
와 같이 Quicklisp을 이용해서 로딩해라. 어차피
Quicklisp이 ASDF이랑 연결되어 있어서 로딩하고, 또 해당 시스템이
참조하는 Quicklisp 의존성들도 이렇게 해야지 제대로 로딩.
그리고 테스트 시스템도 마찬가지로 (ql:quickload :foobar-tests)
와
같이 로딩한 다음에야 (asdf:test-system :foobar)
혹은
(asdf:test-system :foobar-tests)
으로 실행해라.1
끝
https://github.com/ageldama/cl-state-machine/ 작업하며 많은 팁들이 쌓인거 같다. ASDF와 테스트suites 연결하기, ASDF으로 실행파일 만들기 같은 것들에 대한 노하우도 많이 쌓았다.
이런 저런 노하우들을 정리해서 블로깅을 조금씩 해나가야지.
-
foobar
의 defsystem 선언에:in-order-to ((test-op (test-op "foobar-tests")))
으로 테스트 시스템과 연결되어 있다면,(asdf:test-system :foobar)
해도 자동으로foobar-tests
의 테스트들을 실행하겠지. ↩︎