jrk*_*jrk 57 ocaml makefile build ocamlbuild
对于生态系统的新手来说,目前尚不清楚构建和管理中小型OCaml项目的规范首选方式.我理解ocamlc&c.的基础知识- 它们反映了传统的UNIX C编译器,看起来很简单.但是,高于单个文件的一次性编译水平,目前还不清楚如何最好地简单干净地管理编译.问题不是寻找潜在的工具,而是通过社区的经验验证一种或几种正确的(足够的)方法来构建和构建标准的OCaml项目.
我的模型用例是一个适度但非常重要的项目,纯OCaml或OCaml加上C依赖项.这样一个项目:
几个替代工具脱颖而出:
(我也看过OMake,它似乎是一个自封的" make++",它还包括一套常用语言的标准规则,包括OCaml和ocaml- makenéeOCamlMakefile,为GNU提供标准规则的模板make.)
这些都是管理OCaml构建的首选现代方式吗?
项目文件的结构如何最佳?
如何包含和管理第三方库依赖项?是首选在系统级别安装它们,还是有一种标准和直接的方式在本地管理项目?我更喜欢一种模式,其中项目尽可能保持独立.
Ash*_*wal 21
您已经详细列出了可用的选项,但这个问题没有明确的答案.我个人的建议也是使用ocamlbuild.这里提供的myocamlbuild.ml文件是一个很好的开始.它将允许您轻松编译依赖于各种库的项目.我不认为它处理绑定到C库的情况,但是wiki上还有其他一些可能有帮助的例子.
有些人反对ocamlbuild,因为它是另一种构建工具,使包管理器工作变得复杂.然而,它的易用性以及它被包含在官方发行版中的事实使得它被越来越广泛地使用.
您也可以跳过所有这些并直接使用oasis.这是非常新的,稳定版本尚未公布,但它非常实用.它会自动为您生成myocamlbuild.ml.如果不是这样,这可能是在不久的将来发展的方式.此外,通过使用oasis,您将立即获得oasis-db的好处,这是一个正在开发的OCaml的CPAN系统.
关于管理图书馆,答案是ocamlfind.如果安装了多个OCaml实例,则调用ocamlfind的相应副本将自动导致对库的所有引用都是针对该特定实例的引用,假设您对所有库系统地使用了ocamlfind.我目前使用godi来安装OCaml和库.它使用ocamlfind,我可以安装多个OCaml实例.
ako*_*ski 14
我个人给ocamlbuild +1.它的默认规则足以用一个命令编译中小型项目,没有编译到非常小的配置.它还强制执行一些非常合理的约定(不要将源与构建结果混合).对于大型项目,它可以根据自己的需求进行定制,并提供额外的规则和插件.在我工作的公司,我们将它用于一个大型项目(Ocaml +一些C +一些预处理+ ...),它就像一个魅力(并且让我们比Makefiles更少头痛).
至于手册,我认为用户指南(可以从作者的网页上获得)应该足以让你入门.更时髦的东西可能需要更多的挖掘.
blt*_*txd 10
为OMake +1.
几年前我们改进了构建基础架构并选择了OMake,原因如下:
说实话,我不知道我们是否可以用ocamlbuild完成它,我还没有测试过.该工具正在使用中,因为OCaml的bugtracker中存在一些活动.如果您选择ocamlbuild,请确保您拥有最新版本的OCaml.
*OMake以一种非显而易见的方式支持源外构建.当源是只读时,它也有一些问题.我们必须修补并重建我们的Windows版本的OMake.