1

我有一个项目,./tests它的根目录有一个目录,其中包含数百 MB 的数据,供几个库的测试使用:

./tests
./src/lib1/dune
./src/lib1/tests/dune
./src/lib1/tests/tests.ml
./src/lib2/dune
./src/lib2/tests/dune
./src/lib2/tests/tests.ml
...

./tests我还为每个库定义了使用数据的测试,如下所示:

(rule
 (alias runtest)
 (action (run ./tests/tests.exe)))

我现在必须以某种方式将测试数据的位置传达给我的每个tests.exe. 使用沙丘最优雅的方法是什么?

似乎沙丘将我的测试数据复制到_build其中是不必要的,因为数据永远不会改变,并且以这种方式浪费数百 MB 的空间是没有意义的。从文档来看,它似乎%{project_root}包含了我的源文件的路径,但不幸的是,变量评估到.哪个对于在 a 之后运行的测试没有用cd _build/default/src/libX,因此.不再指向项目根目录。那么有没有一种沙丘方式来指定原始源目录的路径而没有丑陋的黑客攻击?

现在,我在运行之前使用包含完整路径的环境变量,dune runtest但有没有更集成的方法?

4

1 回答 1

0

我自己没有尝试过,但听起来这data_only_dirs节是你要找的:https ://dune.readthedocs.io/en/stable/dune-files.html#data-only-dirs-since-1-6

于 2020-12-29T10:39:33.423 回答