ASDF不加载通用Lisp文件

Mad*_*ist 0 common-lisp asdf

我目前正在Common Lisp中构建一个项目,并且正在使用ASDF。但是,我遇到了一些困难。即,当我运行时asdf:compile-system,它似乎可以编译。这样我就可以asdf:load-system成功。但是,位于某些文件中的某些功能仍未定义。为了让他们知道,我必须手动导航到该文件并进行编译。

这是系统的声明。有人可以告诉我我做错了什么吗?

(defsystem "xxx-xxxx"
  :version "0.1.0"
  :author ""
  :license ""
  :depends-on ("cl-mongo" "hunchentoot" "clack" "ningle" "cl-json" "hermetic" "lack-middleware-session" "cl-markup")
  :components ((:module "src"
                :components
                ((:file "packages")
         (:file "lisp-utils")
         (:file "xxx-xxxx" :depends-on ("packages"))
         (:file "database" :depends-on ("packages"))
         (:file "database-config" :depends-on ("packages"))
         (:file "server" :depends-on ("packages"))
         (:file "clack" :depends-on ("packages"))
         (:file "routes/activities" :depends-on ("packages"))
         (:file "route-processors" :depends-on ("packages")))))
  :description ""
  :long-description
  #.(read-file-string
     (subpathname *load-pathname* "README.markdown"))
  :in-order-to ((test-op (test-op "xxx-xxxx-test"))))
Run Code Online (Sandbox Code Playgroud)

特别是,我在文件routes/activities和可能存在问题route-processors

Sim*_*Sim 5

根据我对asdf的经验,系统定义中唯一不重要的就是“路由/活动”文件,因为子文件夹定义为模块。此文件应解决您的问题:

(defsystem "xxx-xxxx"
  :version "0.1.0"
  :author ""
  :license ""
  :depends-on ("cl-mongo" 
               "hunchentoot" 
               "clack" 
               "ningle" 
               "cl-json" 
               "hermetic" 
               "lack-middleware-session" 
               "cl-markup")
  :components ((:module "src"
                :components
                ((:file "packages")
                 (:file "lisp-utils")
                 (:file "xxx-xxxx" 
                        :depends-on ("packages"))
                 (:file "database" 
                        :depends-on ("packages"))
                 (:file "database-config" 
                        :depends-on ("packages"))
                 (:file "server" 
                        :depends-on ("packages"))
                 (:file "clack" 
                        :depends-on ("packages"))
                 (:module "routes"
                          :components ((:file "activities"))
                          :depends-on ("packages"))
                 (:file "route-processors" 
                        :depends-on ("packages")))))
  :description ""
  :long-description
  #.(read-file-string
     (subpathname *load-pathname* "README.markdown"))
  :in-order-to ((test-op (test-op "xxx-xxxx-test"))))
Run Code Online (Sandbox Code Playgroud)

解决您的最后评论。出现异常的原因是,依赖项在依赖项的父项所在的列表中解析。因此,如果您说“活动”取决于“包”,但在模块中具有“活动”,则asdf会在该模块中搜索包/ subfolder,由于不存在而无法找到它。不管是否放任无关紧要,这就是它的工作方式。这也很有意义,因为模块通常描述一个逻辑一致的单元,因此依赖关系对于该单元是相似的,否则您可能需要重新考虑您的项目结构。