【问题标题】:ocamlbuild specify output location/nameocamlbuild 指定输出位置/名称
【发布时间】:2015-06-03 11:45:01
【问题描述】:

我可以使用 ocamlbuild 工具指定构建位置和文件名吗?我想说(用伪代码):

ocamlbuild myapp.ml -b native -o bin/myapp

【问题讨论】:

    标签: ocaml ocamlbuild


    【解决方案1】:

    没有这样的选项,但ocamlbuild 是可扩展的,允许您使用Options.add 添加自己的选项。当然,您还需要添加一些实现。基本上,劫持native 的规则并通过安装程序扩展它可能会起作用。要扩展ocamlbuild,您应该write 一个插件(其他选项是创建您自己的独立可执行文件,并使用它代替ocamlbuild,这就是我们在project 中所做的)。

    但对于大多数用途而言,使用ocamlfindoasis 等标准工具就足够了。我建议看后者,因为它更高级。

    绿洲

    使用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
    

    这将生成Makefileconfigure 脚本。运行

    ./configure
    

    像往常一样检查和设置您的环境。例如,./configure --prefix=$HOME 将设置您的构建系统以安装到您的主文件夹中(即安装到 ~/bin 的可执行文件等)。我通常更喜欢安装到 opam 堆栈上,并使用 ./configure --prefix=$(opam config var env)

    最后,普通的一对

    make && make install 
    

    会做的。

    OCamlfind

    ocamlfind 仍然需要您编写 META 文件。通常他们只是通过从一些现有项目中复制粘贴和编辑 META 文件来编写它们。不过写一个也不难,很好documented

    编写元数据后,您可以使用带有-destdir 选项的ocamlfind install 子命令。

    但是ocamlfind 不处理可执行文件,只处理库。所以这可能不适合你。

    【讨论】:

    • 感谢您的建议。您能否提供 oasis 和/或 ocamlfind 中的等效语句?
    【解决方案2】:

    输入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缓存的状态,这个链接最好不要去掉,除非你真的知道自己在做什么。跨度>
    猜你喜欢
    • 2022-07-16
    • 2015-05-17
    • 2018-05-31
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2020-09-12
    • 2013-04-27
    • 2011-08-14
    相关资源
    最近更新 更多