我可以使用 ocamlbuild 工具指定构建位置和文件名吗?我想说(用伪代码):
ocamlbuild myapp.ml -b native -o bin/myapp
我可以使用 ocamlbuild 工具指定构建位置和文件名吗?我想说(用伪代码):
ocamlbuild myapp.ml -b native -o bin/myapp
没有这样的选项,但ocamlbuild
它是可扩展的,并允许您添加自己的选项Options.add
。当然,您还需要添加一些实现。基本上,劫持规则native
并通过安装程序扩展它可能会起作用。要扩展ocamlbuild
您应该编写一个插件(其他选项是创建您自己的独立可执行文件,并使用它而不是 ocamlbuild,这就是我们在项目中所做的)。
但对于大多数用途而言,使用标准工具(ocamlfind
如oasis
. 我建议看后者,因为它更高级。
oasis
您需要编写一个简单的_oasis
文件(或使用交互oasis quickstart
方式编写它)。最小文件看起来像这样:
OASISFormat: 0.4
Name: myapp
Version: 0.0.1
Synopsis: My first application in oasis
Authors: Authors list
Maintainers: Maintainer Name
License: MIT
Copyrights: (C) Copyright Holder
Plugins: META (0.4), DevFiles (0.4)
BuildTools: ocamlbuild
Executable "myapp"
Path: .
MainIs: myapp.ml
Install: true
CompiledObject: best
文件完成后,运行
oasis setup
这将生成Makefile
和configure
脚本。跑
./configure
像往常一样检查和设置您的环境。例如,./configure --prefix=$HOME
将设置您的构建系统以安装到您的主文件夹(即,可执行文件~/bin
等)。我通常更喜欢安装到 opam 堆栈上,并使用./configure --prefix=$(opam config var env)
最后,通常的一对
make && make install
会做这项工作。
ocamlfind
仍然需要您编写 META 文件。通常他们通过从一些现有项目中复制粘贴和编辑 META 文件来编写它们。但是写一个并不难,因为它有很好的文档记录。
编写元数据后,您可以使用ocamlfind install
具有-destdir
选项的子命令。
但ocamlfind
不处理可执行文件,只处理库。所以这可能不适合你。
使用 enter ocamlbuild --help
,我找不到这样的选项。
一种解决方案是编写一个脚本来执行此操作:
#!/bin/bash
ocalmbuild myapp.native // build your executable
mv myapp.native bin/myapp // rename it
编辑:
按照 ivg 的建议,您应该将mv myapp.native
bin/myapp行替换为cp -L myapp.native bin/myapp
.
也许有人可以给出这个选项,我觉得这很有趣,但在用户手册中,没有。所以一种解决方案是使用脚本。