在Common Lisp中,有没有一种方法可以获取编译文件的路径(类似于当前目录)?
该文件不在当前目录文件夹内。
该文件不在当前目录文件夹内。
虽然这应该是一条评论,但我会提供一些代码示例来帮助原作者。
首先,你需要更清楚地说明你想做什么。你要解决的问题是什么?
其次,以下是几个可能有用的示例:
*default-pathname-defaults*
通常设置为启动CL图像时所在的目录:
* *default-pathname-defaults*
#P"/Users/aerique/"
merge-pathnames
允许你构造新的路径名:
* (merge-pathnames "lib/misc" *default-pathname-defaults*)
#P"/Users/aerique/lib/misc"
* (merge-pathnames "lib/misc/" *default-pathname-defaults*)
#P"/Users/aerique/lib/misc/"
asdf:system-source-directory
返回一个系统加载了ASDF后的路径:
* (asdf:system-source-directory :linedit)
#P"/Users/aerique/quicklisp/dists/quicklisp/software/linedit-20111203-git/"
此外,还可以查看链接的ASDF手册以获取更多有用的文件和系统函数。
*load-truename*
和 *load-pathname*
可以提供你所需要的信息。
http://www.lispworks.com/documentation/HyperSpec/Body/v_ld_pns.htm
(defmacro project-pathname ()
(let ((path (or *compile-file-pathname* *load-truename*)))
`(progn ,path)))
这是必要的,因为ASDF存储在一个"/home/you/.../.cache/..."目录中,您需要使用一个宏在编译时捕获路径名。