【问题标题】:OCaml Cmdliner non-standard parametersOCaml Cmdliner 非标准参数
【发布时间】:2018-01-16 19:47:49
【问题描述】:

我正在使用 Cmdliner 制作 OCaml 编译器前端,并且我想复制 Clang 的一些行为,例如“-emit-llvm”选项。我得到的代码,目前是:

(* Whether to generate LLVM (IR or bitcode) output. *)
let llvm =
  let doc = "In conjunction with -S or -c, generate LLVM output instead of
             native output.  For an object file, this means LLVM bitcode (.bc)
             will be generated, and for assembly it will be LLVM IR (.ll)."
  in
  let emit_llvm = Arg.info ["emit-llvm"] ~doc in
  Arg.(value & flag emit_llvm)

这会创建带有 2 个前导破折号的选项“--emit-llvm”,但不清楚如何仅使用 1 个破折号。这可能吗?

【问题讨论】:

  • 我认为 Cmdliner 对仅包含一个字符的短选项使用单破折号,对长选项使用双破折号。所以这可能是不可能的。

标签: ocaml


【解决方案1】:

由于Cmdliner 可以解析短标志组(à la tar -xvf,请参阅this section 的结尾),这将变得过于模棱两可。除了Cmdliner,遵循GNU 的conventions,确实要求两个破折号作为长选项。

但是,您可以做的是使用您的 Sys.argv 并修补一系列您可能会识别的单破折号选项,方法是在通过可选的 argv 将结果显式地提供给 Term.eval 之前用单破折号预先添加它们论据。

【讨论】:

  • 这就是我要做的。好电话。
【解决方案2】:

根据the documentation,长度为 1 的字符串映射到短选项(带有单个破折号),而其他字符串映射到长选项(带有两个破折号)。所以截至cmdliner.1.0.2,这是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多