Random Tech Thoughts

The title above is not random

Common Lisp 中使用 ASDF 安装类库和程序

虽然要做项目,还要参加比赛,时间不算宽裕,但是就是阻挡不了 Lisp 对我的吸引力。这两天看算法导论,实现算法时打算用 Common Lisp 了,边开发边调试这种环境真是太棒了!

安装 Edi Weitz 的 cl-ppcre (一个可移植的 Perl 兼容正则表达式库) 时稍微看了下 ASDF 的使用,原来还是很简单的。我用的 Common Lisp 实现是 SBCL,ASDF 是自带的,所以安装 ASDF 这一步就省了。下面解释下安装过程。

ASDF 用 asd 文件描述包的依赖性等安装信息,通过这个文件就可以安装某个类库了。为了方便管理,可以把要使用的所有的库的 asd 文件在某个目录下建个符号链接(注意,硬链接不行),ASDF 安装时会到这个目录下去找 asd 文件,如果发现是软链接就会转到目标文件所在的目录开始执行安装动作。使用下面代码可以指定这个存放 asd 文件链接的目录:

(require 'asdf)

(setf asdf:*central-registry*
      '(*default-pathname-defaults*
    #p"/path/to/asd/file/directory/"))

安装库时把解压以后的库代码目录中的 asd 文件在上面的 centeral-registry 目录中建个链接:

$ cd /path/to/asdf/file/directory
$ ln -s ../cl-ppcre/cl-ppcre.asd .

然后就可以通过下面的代码安装这个库,第一次加载时会编译成 fasl 文件,以后加载的时候就不需要编译了。

(asdf:operate 'asdf:load-op 'cl-ppcre)

如果每次启动都会用到这些库的话把这些代码写在 Lisp 实现的启动配置文件中,SBCL 的话就是主目录下的 .sbclrc。就这些,OK 了。

Comments