2017-05-03 3 views
2

Ich versuche jbuilder zusammen mit ppx_deriving (ppx_deriving_yojson speziell) zu verwenden, aber stecken seit gut über einer Stunde jetzt fest. Mein aktueller Ansatz ist eine jbuild Datei mit folgendem Inhalt:Wie zu verwenden jbuild und ppx_driver mit 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))))) 

Aber das führt zu

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 

Ausführen des erzeugten ppx_driver in _build/.ppx/default/ppx_deriving_yojson+ppx_driver.runner/ppx.exe manuell mit -print-transformations gibt leere Ausgabe, so dass ich offensichtlich etwas fehlt.

Der Code baut gut mit topkg von nur ppx_deriving und ppx_deriving_yojson als Abhängigkeiten.

+0

Welche Version von ppx_deriving + ppx_deriving_yojson verwenden Sie? jbuilder funktioniert nur mit ppxs basierend auf ocaml-migrate-partree und es gab noch keine Veröffentlichung von opx von ppx_derivation basierend auf ocaml-migration-partree. – hcarty

Antwort

1

Ab neueren Versionen von ppx_deriving_yojson sollte dies möglich sein.

Code:

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

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

und eine Probe jbuild Datei:

(jbuild_version 1) 

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

(install 
((section bin) 
    (files ((main.exe as main))))) 
Verwandte Themen