问题标签 [ocamlbuild]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
242 浏览

ocaml - 如何防止警告 ocamlbuild/oasis 警告?

我正在使用 OCaml 和 Oasis 为 ocamlbuild 生成适当的输入。

这里非常简单的问题 - 每次我编译我的软件时ocaml setup.ml -build都会收到以下警告:

我如何让这些停止?

编辑

我发现所有这些都是在 oasis 生成的 myocamlbuild.ml 中定义的。我使用的外壳 zsh 可能与 ocaml 源如何提取有关 ocamlfind 位置和其他变量等信息的方式不同。因此发出警告。我会看看我是否无法弄清楚如何修复警告。

0 投票
2 回答
388 浏览

ocaml - 如何告诉 _oasis 或 OCamlbuild 生成注释?

问题很简单:我在OCamlBuild或 Oasis 手册中的任何地方都找不到如何告诉该工具在编译时自动生成注释文件 (.cmt)。

注释文件很有用,因为当您使用 Emacs 时,当需要告诉您表达式的类型是什么时,Merlin 会吃掉它们。

0 投票
1 回答
197 浏览

preprocessor - 使用 ocamlbuild 和 camlp5 编译

我正在尝试制作一个我正在使用 ocamlbuild 编译的项目,以避免使用常规的 Makefile,我发现它稍微复杂一些。

具体来说,我有一个语法扩展文件(extend.ml),我需要先编译它。在常规的 Makefile 中会有一条规则:

然后,为了计算依赖关系,会有这样的规则:

当然,任何目标文件的创建都需要与上述类似的规则。


我的问题是,如何将这些规则/要求集成到一个 ocamlbuild 命令(如果可能)?

我尝试先编译extend.ml文件,然后使用以下命令:

但我认为它在任何方面都不是最佳的。

不幸的是,我不熟悉使用 ocamlbuild 作为编译工具,所以任何帮助将不胜感激。

0 投票
1 回答
34 浏览

plugins - Ocamlbuild 插件:仅当目标已更改时才构建动态依赖项

我正在尝试编写一个 ocamlbuild 插件。目标是构建 Qt 应用程序(暂时没有OCaml 代码)。为了处理最后的链接阶段,我在 .qtobjs 文件(如 .itarget)中编写了 obj、mocs、uis 和 rcs 的列表,在 .qtpackages 文件中编写了 Qt 库的列表。适用于这些文件的规则会解析这些列表并在链接所有内容之前动态构建对象、mocs 等。

问题是我不想动态构建没有改变的目标。请参阅以下规则:

我不想在没有必要的时候调用“build”。

注意:一个函数

可以解决我的问题。

0 投票
2 回答
266 浏览

ocaml - 如何使用 ocamlbuild 编译 jocaml 文件并包含一个包?

如何使用 ocamlbuild 工具编译需要cryptokit 包(使用配套 ocaml 成功编译)的 jocaml 源文件?

当我执行命令时,ocamlbuild -pkg cryptokit -use-jocaml a.native我收到此错误:

本质上,ocaml Unix 模块与自己发生冲突。仅当我包含 Cryptokit (with -pkg cryptokit) 时才会出现此错误,这可能是因为 Cryptokit 需要 Unix。a.ml实际上可以是空的并且仍然会重现错误。

我尝试添加-use-ocamlfind标志,但由于它也使用 ocamlfind 来获取编译器,因此它选择 ocaml 编译器而不是 jocaml 编译器。

-verbose 1通过按顺序执行与 ocamlbuild 相同的命令(/.../unix.cmxa由当我在以下位置使用任何 jocaml 功能时,它会完全崩溃a.ml

但是,当我也删除该-I /prefix/lib/ocaml部分时,它会成功编译:

总而言之,我通过手动执行最后一个命令的修改来让它工作,但我想让 ocamlbuild 工作。

我认为这个错误与 Cryptokit 需要 Unix 模块这一事实有关:当我用 ocaml 而不是 jocaml 编译它时,在链接阶段它试图与 ocaml stdlib 链接(需要包含)而不是jocaml 标准库之一(作为标准库的一部分隐式包含)。

0 投票
1 回答
108 浏览

ocaml - Ocamlbuild 将依赖项复制到 _build

我正在尝试使用 ocamlbuild 自动调用piqi从 protobuf 定义中生成 ocaml 模块。这是一个 2 步过程,我必须从%.protobuf文件转到 a %.proto.piqi,最后转到%_piqi.ml.

我的第一步规则如下:

但这不起作用,因为%.proto.piqi目标实际上依赖于我的源目录中的所有“*.proto”文件,因为各个.proto文件在源中相互导入。但是,我不确定如何在 ocamlbuild 中表达它们之间的这种依赖关系。如果将所有原始文件复制到_build而不是仅复制到其中的一个就足够了~dep

0 投票
1 回答
191 浏览

ocaml - 如何将两个自定义 OCaml 模块与“corebuild”链接

我有两个 OCaml 模块,即 nhc.ml 和 test.ml。这两个模块都引用 parser.mly、scanner.mll 和 ast.mli。

目标是拥有一个可执行文件,即 nhc.native,我仍然可以在其中引用 test.ml 的函数。

分开两个模块分别工作:

但是当我尝试使用 corebuild 将两者链接如下时:

我得到错误:

如果我运行相同的命令,而不首先 mkaing 测试可执行文件(test.native),我会收到以下错误:

如何获得指定的功能?

0 投票
1 回答
73 浏览

ocaml - 有没有办法告诉 ocamlbuild 运行我的文件而不是只生成可执行文件?

现在,如果我想重新编译并运行我使用的 ml 文件

有没有更短的方法来做到这一点?在 haskell 中,你可以通过说来运行事情runghc myfile.hs,我想知道 ocamlbuild 或 ocamlfind 是否提供类似的东西。

0 投票
1 回答
178 浏览

ocaml - 使用 OCamlbuild 忽略 OCaml 接口

我有一个大型库,我想创建一个打包所有模块但忽略.mli源目录中存在的文件的目标。ocamlbuild有没有一种通过插件或特殊集合使用的简单方法_tags可以轻松完成此操作。

我能想到的一种潜在解决方案是OCaml插件中的新编译规则,并将它们设置为比内置规则具有更高的优先级。

谢谢你。

0 投票
1 回答
678 浏览

windows - 奇怪的错误,我无法在 Windows 上构建 OCaml 程序

我最近一直试图让 OCaml 工作,并且解释器工作正常,我只是无法用它构建本机可执行文件。这是我的程序:

现在,如果我运行,ocaml program.ml我会得到预期的输出Hello, World!。但是,如果我跑步,ocamlbuild program.native我会得到:

然而,如果我查看目录C:\Users\User\,我可以看到它program.ml.depends存在。再次运行它,我得到:

所以它确实存在!?!?!?!内容是my_prog.ml:。旁注,该_build目录包含以下文件:_digests、_log、program.ml 和 sanatize.sh。以下是我使用 -verbose 10 运行命令时的输出:

如果我强迫它:

我再次运行相同的命令:

此时我确实得到了一个 program.native 文件,但是它不起作用,当我在文本编辑器中打开它时,它以!<symlink>. 使用后readlink指向_build/program.native哪个不存在。在这一点上,我很困惑,不知道下一步该去哪里。让这种编程语言工作起来如此困难,真是太可惜了。

我宁愿不必为了编译 OCaml 而双启动/安装 vm。

最后一件事,我将如何安装 OPAM?