在makefile中需要特定的OCaml版本

时间:2017-01-24 14:16:55

标签: makefile ocaml version ocamlbuild

我的OCaml程序使用OCaml标准库中的一些功能,这些功能仅在4.01.0版本中引入。我如何安排当我的用户编译我的代码时,如果OCaml编译器的版本不是4.01.0或更高版本,编译器会发出错误?我觉得这个错误比一般的“未绑定变量”错误更有帮助。

我看到ocaml -vnum发出“4.01.0”所以我想我可以尝试在我的Makefile中检查一下,但也许有一种正确的方法可以做到这一点?我正在使用OCamlBuild,如果有帮助的话。

顺便说一下,我当前的Makefile看起来像这样:

all:
    @ echo "Attention: requires OCaml version >= 4.01.0."
    ocamlbuild -cflag -annot -lib str -lib unix name_of_my_project.native
    mv name_of_my_project.native name_of_my_project

clean:
    ocamlbuild -clean
    rm -f name_of_my_project

2 个答案:

答案 0 :(得分:1)

总有不止一种方法:)我的正确方法是使用oasis。其他人可能会使用指定版本的Autotool AC_PROG_OCAML。还有其他构建系统,可能有自己的方法。当您将包发布到opam(it is also very easy)时,您将向opam文件添加约束,以便包管理器甚至不会尝试构建它。

因此,总结一下我的个人建议是使用绿洲。它非常简单,但仍然非常通用。在您的情况下,_oasis控制文件应如下所示:

OASISFormat: 0.4
Name:        name
Version:     0.0.1
OCamlVersion: >= 4.01.0
Synopsis:    Cool package
Authors:     Myself
Maintainers: Myself
License:     MIT
Copyrights:  (C) Myself
Plugins:     META (0.4), DevFiles (0.4)
BuildTools: ocamlbuild


Executable "project"
  Path:           src
  MainIs:         project.ml
  CompiledObject: best
  BuildDepends:   str, unix

创建文件后,您可以使用

创建配置脚本
oasis setup

在准备就绪后(它还会创建setup.ml文件),你可以使用常见的:

 ./configure
  make
  make install

答案 1 :(得分:1)

如果你已经有了Makefile,那么插入一个支票可能是实现这一目标最实用的方法。可以使用Makefile表达式或shell来完成。这是类似检查的shell版本:https://github.com/alavrik/piqi/blob/master/configure#L144

有点相关,我正在为OCaml寻找条件编译,最后使用optcomp。这是一个example