我的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
答案 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