ASDF输出重定向(ASDF output redirection)

2019-10-20 17:11发布

我想设置在那里ASDF店编译的文件目录。 我更愿意从一个shell脚本做到这一点。 根据这个页面 ,你应该定义环境变量ASDF_OUTPUT_TRANSLATIONS

OK,那就是:

$ 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_OUTPUT_TRANSLATIONS 。 偶数和奇数。 小和大。 没有成功。 这将是如果有这样配置的示例的方式更容易,但我找不到一个。

另一个问题是,我不知道这会被编译系统将不会覆盖彼此的同名文件时ASDF把一切都变成一个目录。 我真的想暂时从shell脚本设置输出目录,所以每个文件将在可预见的地方无论身在何处的源文件。

Answer 1:

我的阅读方式http://common-lisp.net/project/asdf/asdf/Controlling-where-ASDF-saves-compiled-files.html ,你需要把一个映射有指定的匹配和翻译。 在SEXP语法,你可以指定它为(t "/home.../...dir/")其中t意味着匹配所有。

您还可以使用功能翻译目录:

(t (:function (lambda (dir) #|translate dir as you like|#)))

也读到哪里把这样的指令。 环境变量似乎是,我还没有完全了解一些特殊的语法处理。 你可以使用配置文件来代替,如果它不工作了。

编辑:对不起,只是阅读文档(这确实有改进的余地) http://common-lisp.net/project/asdf/asdf/Output-Configuration-DSL.html 。 您可能需要更明确一点:

(:output-translations (t "/foo/bar"))

相应的“贝壳型”的语法可能是这样的:

**/:/foo/bar


Answer 2:

我成功有以下:

$ export ASDF_OUTPUT_TRANSLATIONS="/:$HOME/.cache/common-lisp/my-dir/"

注1:目标目录可能不存在:在这种情况下,航空自卫队将创建它。

注2:一个不能使用相同的符号, ***此字符串。 目录/表示所有可能的目录。

注3:ASDF将内部创建子目录my-dir像这样:

/home/mark/.cache/common-lisp/my-dir/home/mark/path/to/source/files/

这不正是我想要的,但因为我可以检测建筑将它们放置在哪里我的shell脚本所在目录的子目录发生前的源文件的位置,这是不是一个关键问题。



文章来源: ASDF output redirection