Argu すごい
gmake のオプションを前半だけ書いてみた。
type Arguments = | [<AltCommandLine("-B")>] Always_Make | [<AltCommandLine("-C")>] Directory of dir : string | Debug of mode : DebugMode option | [<AltCommandLine("-e")>] Environment_Overrides | Eval of expr : string | [<AltCommandLine("-f")>] File of file : string | [<AltCommandLine("-i")>] Ignore_Errors | [<AltCommandLine("-I")>] Include_Dir of dir : string | [<AltCommandLine("-h")>] Jobs of n : int option | [<AltCommandLine("-k")>] Keep_Going with interface IArgParserTemplate with member this.Usage = match this with | Always_Make -> "Unconditionally make all targets." | Directory _ -> "Change to <dir> before doing anything." | Debug _ -> "Print various types of debugging information." | Environment_Overrides -> "Environment variables override makefiles." | Eval _ -> "Evaluate <expr> as a makefile statement." | File _ -> "Read <file> as a makefile." | Ignore_Errors -> "Ignore errors from recipes." | Include_Dir _ -> "Search <dir> for included makefiles." | Jobs _ -> "Allow <n> jobs at once; infinite jobs with no arg." | Keep_Going -> "Keep going when some targets can't be made."
DebugMode
に何を入れるのかわからなかったので、スキップ。
書くならこんな感じに:
type DebugMode = | A = 1 | B = 2 | C = 3
コマンドラインをパースする
コマンドラインをパースするにはパーサーを作成する:
open Argu let parser = ArgumentParser.Create<Arguments>( programName = "make.exe", errorHandler = ProcessExiter() )
第 2 引数の errorHandler = ProcessExiter()
を忘れると恐ろしいことが起こるので注意。
後は、argv
を引数に parser
の Parse()
メソッドか ParseCommandLine()
メソッドを呼び出すだけ:
let results = parser.ParseCommandLine argv
すると、Arguments []
が返ってくる。
ので、これをあれこれする。
らしい。