OCaml Cmdliner非标准参数

时间:2018-01-15 21:31:30

标签: ocaml

我正在使用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)

这会创建选项" - emit-llvm"有2个前导破折号,但它不清楚如何只用1.这可能吗?

2 个答案:

答案 0 :(得分:4)

由于Cmdliner可以解析短标志组(例如-xvf,见this section的结尾),这将变得过于模糊。除Cmdliner之外,遵循GNU的conventions,确实要求两个短划线用于长选项。

然而,您可以执行的操作是Sys.argv并修补一些您可能认识到的单个短划线选项,方法是先用一个破折号预先添加它们,然后通过“Term.eval明确地将结果提供给https://github.com/carhartl/jquery-cookie”可选的argv参数。

答案 1 :(得分:3)

根据the documentation,长度为1的字符串映射为短选项(带有单个短划线),其他字符串映射为长选项(带有两个短划线)。从<table> <tr *ngFor="let data of temlateInputs;let i = index;"> <td> {{data.name}} </td> <td>{{data.bi}} <input type="text" class="form-control" name="bi{{i}}" [(ngModel)]="data.bi" /> </td> <td>{{data.ex}} <input type="text" class="form-control" name="ex{{i}}" [(ngModel)]="data.ex" /> </td> <td>{{data.br}} <input type="text" class="form-control" name="br{{i}}" [(ngModel)]="data.br" /> </td> <td>{{data.ot}} <input type="text" class="form-control" name="ot{{i}}" [(ngModel)]="data.ot" /> </td> </tr> </table> 开始,这是不可能的。