common lisp - get path to file

[亡魂溺海] 提交于 2019-12-21 08:27:46

问题


In Common Lisp, is there a way to get the path to a compiled file (something like current-directory)?

The file is not inside the current-directory folder.


回答1:


This ought to be a comment but I'm going to give some code examples that might help the original poster along.

First of all, you need to be a little more clear about what you want to do. What is the problem you're trying to solve?

Secondly, here are a couple of examples which could be useful:

  • *default-pathname-defaults* usually set to the directory the CL image was started up in:

    * *default-pathname-defaults*
    #P"/Users/aerique/"
    
  • merge-pathnames allows you to construct new 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 returns the path to a system loaded with ASDF:

    * (asdf:system-source-directory :linedit)  
    #P"/Users/aerique/quicklisp/dists/quicklisp/software/linedit-20111203-git/"
    

Also see the linked ASDF manual for more useful file and system functions.




回答2:


*load-truename* resp. *load-pathname* gives you what you need.

http://www.lispworks.com/documentation/HyperSpec/Body/v_ld_pns.htm




回答3:


Perchance you want compile-file-pathname, which gives you the destination where compile-file would write into.

It'd help if you provide more context on what you're trying to achieve.




回答4:


If you want get the pathname whitout use ASDF function, but you need also attend the users that use ASDF, you can use like this:

(defmacro project-pathname ()
  (let ((path (or *compile-file-pathname* *load-truename*)))
    `(progn ,path)))

It's necessary because the ASDF stores in one "/home/you/.../.cache/..." directory, and you need capture the pathname in compilation time with one macro.




回答5:


You can use:

*default-pathname-defaults*

Please see http://cybertiggyr.com/gene/pathnames-0/node11.html



来源:https://stackoverflow.com/questions/8409527/common-lisp-get-path-to-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!