ocamlbuild;建筑顶层

2024-01-01

已成功使用子目录重新组织了我的 ocamlbuild 项目 https://stackoverflow.com/questions/2209532/properly-compiling-modules-in-subfolders-ocamlbuild使用 ocamlfind,我发现很难构建顶层。

我构建了一个.mltop包含所有要包含的模块的文件并将包添加到_tags,但构建不起作用。它找不到使用模块之一编译的 C 函数。和-classic-display上,我可以看到该文件,libcside.a,没有被包含,甚至根本没有被编译! c 文件作为依赖项添加到myocamlbuild.ml by,

flag ["link"; "ocaml"; "use_cutil"] (S [A"-cclib"; A"-L."; ]);
dep  ["link"; "ocaml"; "use_cutil"] ["libcside.a"];

and in _tags,

<utilities.*> : use_cutil
<**/*.top> : use_str, use_unix, use_cutil, use_curl, use_mysql

最后,在libcside.clib,

cutil.o

我在设置顶层构建时遗漏了一些东西,但我无法在网上找到可靠的资源。谢谢。


  • 我认为 cutil.ml 描述了 libcs​​ide.a 的 ocaml 方面 - 正确吗?
  • 你把Cutil放入mltop了吗?
  • 使用您当前的插件 cutil ocaml 库将不会链接 libcs​​ide.a (dep仅指示 ocamlbuild 构建它,而不是链接)
  • 这是使用 C 存根构建项目本地 ocaml 库的简单(且有效)方法。在 myocamlbuild.ml 中:

    ocaml_lib "linuxnet";
    let liblinuxnet_stubs = "liblinuxnet_stubs." ^ !Options.ext_lib in
    flag ["link"; "ocaml"; "use_linuxnet"] (S[A"-cclib"; A liblinuxnet_stubs;]);
    dep  ["link"; "ocaml"; "use_linuxnet"] [liblinuxnet_stubs];
    

    在 liblinuxnet_stubs.club 中:

    linuxnet_c.o
    

    请注意,C 源代码被称为linuxnet_c.c这样生成的目标文件就不会覆盖 linuxnet.ml 中的目标文件(反之亦然)。最后在 _tags 中:

    true: use_linuxnet
    

    通过此设置,它将在顶层可用(请注意,无需将Linuxnet到 .mltop 中,因为 linuxnet.cma 将被添加到链接中use_linuxnet标志(生成于ocaml_lib用法))。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ocamlbuild;建筑顶层 的相关文章

  • OCaml 在运行时编译和加载

    我正在尝试实现类似的目标eval 在 OCaml 中 我有一个string我想从中得到一个 OCaml 函数 目前我正在做以下事情 我将字符串转储到new ml并编译文件 Compile implementation Format std
  • Jenkins 构建步骤超时

    在 Jenkins 中 有没有办法为每个或选定的构建步骤提供不同的超时 构建时插件提供了完整项目上的超时 如果卡住则中止构建 功能 我需要的是为每个步骤提供不同的超时 这样我就可以使我的流程更加高效 如果您使用 Jenkins 管道 并且较
  • 如何让编译日志在Emacs中创建一个新窗口?

    如果我在 emacs 中只显示一个窗口并使用 M x 编译 则该窗口会一分为二 我可以轻松查看编译缓冲区 但是 如果我显示更多窗口 编译日志就会接管其他窗口之一 这让我感到恼火 如何让emacs始终分割一个新窗口来显示编译日志 编辑 从我一
  • 如何使用List.fold_left?

    我仍在尝试了解如何fold left完全有效 它是否像这样迭代列表List iter 或者我的代码还有其他问题吗 我认为 e 是列表中的元素 所以它是一个元组 并且fst e获取元组的第一个元素并且snd e获取元组中的第二个元素 let
  • OCaml 中 let rec 的限制

    这几天我在学习OCaml 发现了这个 OCaml 对于可以放在 let 记录右侧的内容有限制 像这个 let memo rec f norec let rec f memoize fun x gt f norec f x in f Erro
  • Opencv 函数只能以 C 代码方式调用,不能以 C++ 方式调用

    我对 Opencv 真的很陌生 按照说明下载并安装 Opencv 2 4 后 我开始编写我的第一个 Opencv 程序 这基本上是网络上教程的副本 include
  • 为什么编译超过 100,000 行的 std::vector::push_back 需要很长时间?

    我正在编译一个 C 库 它定义了一个从一组数据点中随机采样的函数 数据点存储在std vector 有 126 272std vectorPush back 语句 其中所讨论的向量的类型double 编译需要很长时间 为什么这需要这么长时间
  • 即时编译与提前编译相比有何优点?

    我最近一直在思考这个问题 在我看来 最大的优势是JIT编译或多或少应该归因于中间格式 而抖动本身并不是生成代码的好方法 那么主要就是这些pro JIT我经常听到的编译参数 即时编译可实现更大的可移植性 这不是中间格式的原因吗 我的意思是 一
  • 使用 OCaml 警告属性禁用警告 8:不详尽的匹配

    我正在尝试编写类似于以下内容的代码 let a b body 1 2 我想仅针对该模式禁用警告 8 a b 而不是为了身体或让之外的任何东西 我尝试设置警告属性来禁用警告 但以下方法都不起作用 let warning 8 a warning
  • Hudson 基于 URL 令牌构建

    我配置了一个 hudson 实例并创建了作业 创建构建时 我能够看到此选项 通过访问此 URL SecretTOKEN 触发构建 选项 现在 我无法在我创造的任何新工作中看到这一点 我是否缺少某些设置或配置 我所做的唯一更改是将 servl
  • 玩框架。无需编译

    我被介绍到 Play 框架 我发现它的令人惊奇的事情之一是不需要编译项目 您只需保存编辑的文件并重新加载网页即可 我听说 Java 源代码被编译为字节码 然后使用 JIT 编译器进行编译 那么 Play 框架内部到底有什么魔力呢 在 DEV
  • 从命令行安装 Oracle 客户端,无需用户交互

    我正在寻找一种在 Windows 上安装 Oracle 客户端但从命令行运行的方法 为了自动运行它应有没有用户交互 对于 Oracle Universal Installer 的命令行选项 Oracle 文档非常稀疏 即使运行设置为setu
  • 编译器如何解析在变长数组之后声明的变量的地址?

    假设我有以下函数 它使用可变长度数组 void func int size int var1 int arr size int var2 编译器如何确定地址var2 我能想到的唯一方法就是放置arr after var1 and var2
  • 为 iPhone 应用程序设置自动构建服务器的最佳实践?

    我正在为我们的 iPhone 应用程序设置一个自动夜间构建服务器 并寻求有关哪些有效 哪些无效的建议 基本上 至少每晚运行所有单元测试并向我们的内部网站发布新的临时版本 所有开发人员都使用笔记本电脑 笔记本电脑将在夜间关闭 因此我正在考虑购
  • 如何在 OCaml 中使协变可观察

    我正在尝试为值制作一个包装器 允许调用者自行注册以获取有关它的通知 这是一些 工作 代码 module Thing sig type a t val make a gt a t val watch a gt unit gt a t gt u
  • 用于多个项目构建的多个设置 gradle 文件

    我有以下项目结构 gt Starnderd Location gt Project1 gt settings gradle gt build gradle gt Subproject11 gt build gradle gt Subproj
  • OCaml 文字负数?

    我在学 这是我觉得奇怪的事情 let test treeways x match x with when x lt 0 gt 1 when x gt 0 gt 1 gt 0 如果我这样称呼它 test threeways 10 我会得到类型
  • 我可以使用带有较新 JDK 的 ant 来编译较旧 Java 版本的 java,以便在编译使用较新 API 的代码时生成输出吗?

    我只想在我的系统上安装 JDK 8 并让 ant javac 编译操作为 java 6 环境创建工作类文件 如果我在语法上仅使用符合 java 6 的代码 那么这种方法就有效 但我的代码可以访问 java 8 API 的方法 类 并且根据
  • 使用 SSD 加快编译时间

    我想尝试加快 C 项目的编译时间 他们有大约 300 万行代码 当然 我不需要总是编译每个项目 但有时有很多源文件被其他人修改过 我需要重新编译所有这些文件 例如 当有人更新一个项目时 ASN 1 https en wikipedia or
  • 如何在TFS Build中递归删除通配符文件?

    我想递归删除与特定模式匹配的文件 作为 TFS Build 中构建后清理例程的一部分 我试过这个

随机推荐