OCaml dune 自定义构建命令

dune 有很强大的扩展功能,但是文档并不会直接告诉你,今天我就通过一个具体的实例,来分享我们用dune配置,可以让dune干很多事。

例如:

  1. 发布编译的文档,到我们的文档服务器
  2. 发送邮件通知邮件组
  3. 发送短信通知管理员
  4. 构建文档,打开浏览器预览文档页面

先看一个例子,我们在项目的 根目录,建立一个dune文件,原本你可能没有这个文件,你得新建一个,我们输入下面的内容

; now we tell you how to define a custom rule 
; rule start with (rule )
(rule 
; (alias is point  the command name , so you can run this rule by call  dune build @docopen
 (alias docopen) 
 ; following line is very important, it tell dune do not cache this build command, so it will running every call without any cache
 (deps (universe))
 ; action  (system  to told system run command by `sh` in your Linux/MacOS, windows user may running cmd.exe 
 ; cd ../.. is change the base directory of the running command ,or the default directory will be _build/default  
 (action (system "cd ../.. && pwd &&  dune build @doc && open _build/default/_doc/_html/index.html" ))
)
; end of one piece of rule

; and we define more and more rule as we want 
(rule
  (alias whoami)
  (deps (universe))
  (action (system "uname -a;whoami"))
)

在这个实例里面,我们定义了两个rule,rule就是dune 可以识别的task,在dune里面,它叫rule

因为是自定义的构建命令,所以我们用alias 取一个唯一不重复的别名。

第一个构建命令,是构建文档,并打开浏览器预览。

我们的alias别名叫 docopen

然后deps 我们加上 universe,告诉dune,你可别缓存了,每次都给我全新构建。你不加这一行,dune就只会给你构建一次,然后因为缓存缘故,后面就不给你执行了。

action system这里,action是命令开始,system是指用系统的shell(windows下是cmd,linux macos是sh)给你执行你所指定的代码。

大家可以看到第一个我们是先改变目录到项目根目录【因为默认的目录是_build/default】,然后我们执行构建文档生成,再open打开生成后的html页面。

第一个构建命令就是这样,如果你想执行第一个构建任务,你可以输入

dune build @docopen

那么我们第二个构建命令,相对就简单了,参照第一个,我们可以在这个dune配置文件里面,加上许许多多我们想要加的构建命令。

只需要为他们指定不一样的alias别名就行了,不能重复。

官方文档还指定了其他的一些可用的命令,我就不一一去讲了。因为我是比较喜欢用shell脚本的,所以真正对于我来说,我只需要system去执行我的shell脚本就行了。

 

分类: 默认 标签: 发布于: 2022-06-29 14:33:54, 更新于: 2022-06-29 14:33:54