2015-02-27 8 views
5

Da Building OCaml code that uses list comprehension post, posso utilizzare il file _tags per eseguire ocamlbuild con meno opzioni di compilazione.Qual è lo scopo del file _tags con OCaml e come interpretare i contenuti?

$ cat _tags 
<**/*> : package(camlp4),syntax(camlp4o),package(pa_comprehension) 

Dal Batteries introduction, ho anche bisogno di avere _tags file da usare il pacchetto batterie.

<*>: package(batteries) 

Perché il primo esempio utilizza <**/*> quando il secondo esempio utilizza <*>? In generale, qual è lo scopo del file _tags in ocamlbuild? Hai qualche buon tutorial su di esso?

risposta

6

Un file _tags in aggiunta a myocamlbuild.ml costituisce la radice del sistema di compilazione ocamlbuild.

ocamlbuild è uno strumento molto generico, in grado di compilare qualsiasi cosa. È guidato da un risolutore che, in base all'obiettivo impostato da un utente, trova una soluzione in grado di soddisfare l'obiettivo. La soluzione è una catena di regole applicate ai file. I file possono essere taggati per tag. I tag possono alterare le regole. Ad esempio, può aggiungere contrassegni, come abilitare la profilazione o il collegamento a una libreria.

Un file _tags fornisce un meccanismo per assegnare tag ai file e ha una semplice grammatica:

pattern ":" tag "," {tag}. 

Qual è a sinistra del : è in realtà un motivo o l'espressione regolare. Ad ogni file che corrisponde all'espressione verranno assegnati tutti i tag che si trovano a destra di :.

<**/*> significa per tutti i file in questa cartella e tutte le sottocartelle, esiste una scorciatoia per questo: true. <*> significa per tutti i file su questa cartella (senza discendere nelle sottocartelle). Altri esempi sono <*.ml>, <*.cmx> o <**/*.cma> (btw or può anche essere utilizzato per creare un modello).

OCamlbuild è documentato in OCaml Manual, c'è anche un dump della vecchia wiki, con molte informazioni.

Ma la parte divertente è che di solito non è necessario sapere questo per poter utilizzare OCaml. C'è uno strumento OASIS che automatizza tutte le attività e crea il file _tags per te da una definizione semplice e di alto livello.