You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dune构建中包含非OCaml/Reason文件?

解决Dune构建时包含测试资源文件的问题

你需要在test目录的dune文件中添加规则,让Dune将测试资源文件复制到_build目录中,有两种常用方式:

方式一:在Test Stanza中使用(data)字段

直接在定义测试的stanza里指定需要包含的资源文件,Dune会自动将这些文件复制到测试可执行文件所在的_build/test目录下:

(test
 (name tests)
 (libraries lib)
 (data test_files/*.txt))

这种方式下,测试代码里可以直接用文件名读取(比如"test_input1.txt"),因为文件会被放到和测试程序同一目录。

方式二:使用(copy_files) Stanza保留目录结构

如果希望在_build中保留test_files的目录结构,避免路径混乱,可以单独添加(copy_files)规则:

(test
 (name tests)
 (libraries lib))

(copy_files test_files/**)

此时测试代码需要用相对目录路径读取文件,比如:

let read_input file =
  let full_path = Filename.concat "test_files" file in
  In_channel.with_open_text full_path In_channel.input_all

补充说明

include_subdirs确实只用于扫描OCaml模块文件(.ml/.mli),不会处理文本这类非模块资源,所以必须用上述两种方法明确告诉Dune要复制这些文件。

内容的提问来源于stack exchange,提问作者Fluffy the Togekiss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:29:58