【发布时间】:2015-06-03 11:45:01
【问题描述】:
我可以使用 ocamlbuild 工具指定构建位置和文件名吗?我想说(用伪代码):
ocamlbuild myapp.ml -b native -o bin/myapp
【问题讨论】:
标签: ocaml ocamlbuild
我可以使用 ocamlbuild 工具指定构建位置和文件名吗?我想说(用伪代码):
ocamlbuild myapp.ml -b native -o bin/myapp
【问题讨论】:
标签: ocaml ocamlbuild
没有这样的选项,但ocamlbuild 是可扩展的,允许您使用Options.add 添加自己的选项。当然,您还需要添加一些实现。基本上,劫持native 的规则并通过安装程序扩展它可能会起作用。要扩展ocamlbuild,您应该write 一个插件(其他选项是创建您自己的独立可执行文件,并使用它代替ocamlbuild,这就是我们在project 中所做的)。
但对于大多数用途而言,使用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 文件来编写它们。不过写一个也不难,很好documented。
编写元数据后,您可以使用带有-destdir 选项的ocamlfind install 子命令。
但是ocamlfind 不处理可执行文件,只处理库。所以这可能不适合你。
【讨论】:
输入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。
也许有人可以提供这个选项,我觉得这很有趣,但在用户手册中,没有。所以一种解决方案是使用脚本。
【讨论】:
cp -L 而不是mv。首先mayapp.native是一个真实文件的链接,其次是用来控制ocamlbuild缓存的状态,这个链接最好不要去掉,除非你真的知道自己在做什么。跨度>