2017-05-03 47 views
2

我想使用jbuilder連同ppx_derivingppx_deriving_yojson具體),但現在停留了一個多小時。我目前的做法是jbuild文件,包含以下內容:如何使用jbuild和ppx_driver與ppx_deriving

(jbuild_version 1) 
(executables 
((names (my-binary)) 
(libraries 
(ppx_deriving 
    ppx_deriving_yojson 
    cohttp 
    yojson)) 
(preprocess (pps (ppx_deriving_yojson ppx_driver.runner))))) 

但導致

Command [5] exited with code 1: 
$ (cd _build/default && ../.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe --dump-ast -o src/my_file.pp.ml --impl src/my_file.ml) 
File "src/my_file.ml", line 16, characters 5-13: 
Error: Attribute `deriving' was not used 

運行在_build/.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe生成的ppx_driver-print-transformations手動給空輸出,所以我顯然失去了一些東西。

該代碼與topkg通過僅包括ppx_derivingppx_deriving_yojson作爲依賴關係建立良好。

+0

什麼版本ppx_deriving + ppx_deriving_yojson您使用的是? jbuilder僅適用於基於ocaml-migrate-parsetree的ppxs,並且還沒有基於ocaml-migrate-parsetree的ppx_deriving opam發佈。 – hcarty

回答

1

從更新的ppx_deriving_yojson版本開始,這應該是可能的。

代碼:

type t = {x: int; y: int} [@@deriving to_yojson] 

let() = print_endline (Yojson.Safe.to_string (to_yojson {x= 1; y= 2})) 

和樣本jbuild文件:

(jbuild_version 1) 

(executables 
((names (main)) 
    (preprocess (pps (ppx_deriving_yojson))) 
    (libraries (ppx_deriving_yojson.runtime)))) 

(install 
((section bin) 
    (files ((main.exe as main))))) 
相關問題