我想设置在那里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脚本设置输出目录,所以每个文件将在可预见的地方无论身在何处的源文件。
我的阅读方式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
我成功有以下:
$ 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脚本所在目录的子目录发生前的源文件的位置,这是不是一个关键问题。