自作コンパイラでアセンブラの出力先を指定したくて、コマンドラインからのオプション処理を追加した。
いくつかライブラリを比較したが、結局ここのソースがわかりやすく、この方法を使った。
ありがとうございます。
type Param = { OutputDirX64:string;OutputDirRiscv:string; File:string } [<EntryPoint>] let main args = let rec parseImpl input param = match input with | "--output-dir-x64" :: dir :: tail -> parseImpl tail { param with OutputDirX64 = dir } | "--output-dir-riscv" :: dir :: tail -> parseImpl tail { param with OutputDirRiscv = dir } | file :: tail -> parseImpl tail { param with File = file } | [] -> param let parse input = parseImpl (Array.toList input) {OutputDirX64 = work_dir_x64; OutputDirRiscv = work_dir_riscv; File = "" } let options = parse args let filename = options.File work_dir_x64 <- options.OutputDirX64 work_dir_riscv <- options.OutputDirRiscv
まず最初にオプションをいれる型と再帰的にオプションを処理するparseImplを定義する。 parseImplにargsを与えることで、オプションの値が設定される。なるほど。
分かりやすいし、新しくライブラリを追加する必要も無いのが良い。
これでコンパイルしたファイルの出力先を指定できるようになった。