在Common Lisp中,有没有办法获取编译文件的路径(类似于当前目录)?
该文件不在当前目录文件夹中。
答案 0 :(得分:11)
这应该是一个评论,但我会给出一些可能有助于原始海报的代码示例。
首先,您需要更清楚自己想做什么。你试图解决的问题是什么?
其次,这里有几个可能有用的例子:
*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手册,了解更多有用的文件和系统功能。
答案 1 :(得分:7)
*load-truename*
resp。 *load-pathname*
为您提供所需的信息。
http://www.lispworks.com/documentation/HyperSpec/Body/v_ld_pns.htm
答案 2 :(得分:2)
您想要的compile-file-pathname
,它会为您提供compile-file
写入的目的地。
如果您提供有关您要实现的目标的更多背景信息,那将会有所帮助。
答案 3 :(得分:0)
如果您想使用ASDF功能获取路径名,但还需要参加使用ASDF的用户,则可以这样使用:
(defmacro project-pathname ()
(let ((path (or *compile-file-pathname* *load-truename*)))
`(progn ,path)))
这是必要的,因为ASDF存储在一个“ / home / you /.../。cache /...”目录中,并且您需要在编译时使用一个宏捕获路径名。
答案 4 :(得分:-1)