ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

F#でコマンドラインからのオプション処理

自作コンパイラでアセンブラの出力先を指定したくて、コマンドラインからのオプション処理を追加した。

いくつかライブラリを比較したが、結局ここのソースがわかりやすく、この方法を使った。

jyuch.hatenablog.com

ありがとうございます。

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を与えることで、オプションの値が設定される。なるほど。

分かりやすいし、新しくライブラリを追加する必要も無いのが良い。

これでコンパイルしたファイルの出力先を指定できるようになった。