Lisp ASDF输出重定向

Lisp ASDF输出重定向,lisp,common-lisp,clisp,asdf,Lisp,Common Lisp,Clisp,Asdf,我想设置ASDF存储编译文件的目录。我更喜欢用shell脚本来完成它。根据,应该定义环境变量ASDF\u OUTPUT\u TRANSLATIONS 好的,给你: $ export ASDF_OUTPUT_TRANSLATIONS="$HOME/.cache/common-lisp/my-dir/" 但当我尝试测试配置时,它不起作用: $ clisp -x "(asdf:compile-system :my-system)" 输出: ;; Loading file /home/mark/.c

我想设置ASDF存储编译文件的目录。我更喜欢用shell脚本来完成它。根据,应该定义环境变量
ASDF\u OUTPUT\u TRANSLATIONS

好的,给你:

$ export ASDF_OUTPUT_TRANSLATIONS="$HOME/.cache/common-lisp/my-dir/"
但当我尝试测试配置时,它不起作用:

$ clisp -x "(asdf:compile-system :my-system)"
输出:

;; Loading file /home/mark/.clisprc.lisp ...
;;  Loading file /home/mark/quicklisp/setup.lisp ...
*** - Uneven number of components in source to destination mapping:
      "/home/mark/.cache/common-lisp/my-dir/"
Bye.
再见。嗯,这是可能的结果之一。我试着给
ASDF\u OUTPUT\u TRANSLATIONS
分配很多值。偶数和奇数。大大小小的。没有成功。如果有这样的配置示例,这将更容易,但我找不到

另一个问题是,我不知道当ASDF将所有内容放在一个目录中时,将要编译的系统是否不会覆盖彼此同名的文件。我真正想要的是从shell脚本临时设置输出目录,这样无论源文件在哪里,每个文件都将位于可预测的位置。

按照我的阅读方式,您需要在那里放置一个映射,指定匹配和转换。在sexp语法中,可以将其指定为
(t)/home…/…dir/”
,其中
t
表示匹配所有

您还可以使用函数转换目录:

(t (:function (lambda (dir) #|translate dir as you like|#)))
还可以阅读关于在何处放置此类指令的内容。环境变量似乎是由一些我还没有完全理解的特殊语法处理的。如果不起作用,可以使用配置文件

编辑:抱歉,只是阅读文档(确实有改进的余地)。您可能需要更明确一点:

(:output-translations (t "/foo/bar"))
相应的“shell友好”语法可能如下所示:

**/:/foo/bar
/home/mark/.cache/common-lisp/my-dir/home/mark/path/to/source/files/

我成功地做到了以下几点:

$ export ASDF_OUTPUT_TRANSLATIONS="/:$HOME/.cache/common-lisp/my-dir/"
注意1:目标目录可能不存在:在这种情况下,ASDF将创建它

注2:不能在此字符串中使用类似
*
**
的符号。目录
/
表示所有可能的目录

注3:ASDF将在
my dir
中创建如下子目录:

**/:/foo/bar
/home/mark/.cache/common-lisp/my-dir/home/mark/path/to/source/files/

这并不是我想要的,但由于我可以通过将源文件放在shell脚本所在目录的子目录中,在构建之前检测到源文件的位置,所以这不是一个关键问题。

无效的asdf输出转换(T)/home/mark/.cache/common lisp/my dir/”(将被跳过)。还尝试了路径名而不是字符串,并使用另一个路径名包装此列表。没有结果。我需要在shell脚本中临时执行它。环境变量比我的配置文件要好得多。无法可靠地转换通配符路径名#P“**/”。尝试了你的建议和更多的变化。多痛苦啊。。。