2014-05-10 182 views
0

我無法使用帶有通用lisp的asdf構建工具。這裏是我的fractals.asd文件:asdf building和Common Lisp

(defpackage :fractals 
    (:use :cl :asdf :cl-opengl :cl-glu :cl-glut) 
    (:export :frac-tree :draw-tree)) 
(in-package :fractals) 
;---------------------------------------------------------- 
(defsystem fractals 
    :name "fractals" 
    :version "0.0.0" 
    :serial t 
    :components ((:file "frac-tree") 
      (:file "fractal-lab"))) 

無論是ffiles fract-tree.lispfractal-lab.lisp有在文件一開始就聲明(in-package :fractals)。但是,我自動收到錯誤消息The name "CL-OPENGL" does not designate any package.我不明白爲什麼這是錯誤的。此外,如果我不包括這些庫,然後我必須手動要求他們自己...我創建了一個名爲目錄:~/.config/common-lisp/source-registry.conf.d/,我放在一個名爲fractals2.conf文件,該文件包含以下內容:

(:directory "~/lisp_proj/fractals2/") 

這是如上所示我的fractals.asd文件的目錄。顯然,這應該告訴asdf我的用戶定義的系統所在的位置。我遵循this教程。

  • 總之,我怎樣才能得到asdf找到我的用戶定義的系統,以便我不必手動加載它們?

感謝您的幫助!

+0

包CL-OPENGL是在什麼地方定義的? –

回答

2

您需要使用:depends-on子句在defsystem中聲明您的依賴關係。 defpackage:use子句只會使已加載的包的名稱可用,但不會加載它們。

順便說一句,您的.asd文件不應該包括主包的defpackage。在那裏申報一個特殊的包來運行defsystem是合理的,但是應該在.lisp文件中聲明常規包。

編輯:這也可以解決你的第二個問題。否則,可能是因爲ASDF不會自動擴展路徑中的~字符。在這種情況下,請將其替換爲您的主目錄的實際路徑。

+0

太棒了!我有一切工作,除了我從'quickload'庫的依賴...我加載這個庫像'(ql:quickload'zpng)'任何建議? – CodeKingPlusPlus

+0

根據我的經驗,Quicklisp確實註冊了它安裝的ASDF庫,所以你應該能夠像其他人那樣從':depends-on'子句中加載它。當你嘗試時你會收到錯誤信息嗎? –

0

1-看起來像你使用未定義的分形:defsystem代替ASDF:defsystem

2- ASDF DSL接受指令(:目錄(:首頁 「lisp_proj/fractals_2」))

3-從3.1.2開始,你可以把所有的東西放在〜/ common-lisp/

4-上帝的緣故,RTFM!