Recentemente ho deciso di organizzare i file nella mia directory di progetto. Ho spostato i parser che ho avuto per un paio di tipi di file differenti nella propria directory e anche deciso di utilizzare ocamlbuild (il quanto il progetto è stato sempre più complicata e lo script di shell semplice non era più sufficiente).correttamente la compilazione di moduli in sottocartelle (ocamlbuild)
Sono riuscito a includere progetti esterni modificando myocamlbuild con alcune regole di base (chiamando ocaml_lib
, userò ocamlfind qualche altra volta), ma sono bloccato su come includere correttamente la cartella come modulo nel progetto . Ho creato un file parser.mlpack
e riempito con i moduli appropriati da inserire (per esempio, "parser/Data", eccetera), scritto un parser.mli
nella radice della directory per le loro implementazioni, e modificato il file _tags
(vedi sotto) .
Durante la compilazione, la directory del parser viene attraversata correttamente e parser.cmi
, parser.mli.depends
sono stati creati nella directory _build
; così come tutti i *.cm[xio]
file nella sottodirectory parser.
mi sento che potrei fare qualcosa di superfluo, ma a prescindere, il progetto ancora non può trovare il modulo parser quando compilo!
Grazie!
_tags
debug : true
<*.ml> : annot
"parser" : include
<parser/*.cmx>: for-pack(Parser)
<curlIO.*> : use_curl
<mySQL.*> : use_mysql
<**/*.native> or <**/*.byte> : use_str,use_unix,use_curl,use_mysql
errore di compilazione
/usr/local/bin/ocamlopt.opt unix.cmxa str.cmxa -g -I /usr/local/lib/ocaml/site-lib/mysql mysql.cmxa -I /usr/local/lib/ocaml/curl curl.cmxa curlIO.cmx utilities.cmx date.cmx fraction.cmx logger.cmx mySQL.cmx data.cmx project.cmx -o project.native
File "\_none\_", line 1, characters 0-1:
Error: **No implementations provided for the following modules:**
Parser referenced from project.cmx
Command exited with code 2.
Noterete -I parser
non è incluso nella fase di collegamento di cui sopra; in realtà nessuno dei file relativi al parser è incluso!
modifica: Aggiunti nuovi dettagli dai commenti e risposta di seguito.
Sì, questo ha funzionato, ma non ha le conseguenze previste. Un modulo che rappresenta il contenuto della directory non è stato creato; vengono referenziati direttamente dai sottomoduli. L'argomento '-pack' viene aggiunto ai moduli appropriati durante la compilazione. Ma non utilizzato nel prodotto finale. La mia interpretazione di -pack non è corretta? – nlucaroni
'-pack' dovrebbe creare un modulo che contenga gli altri moduli come sottomoduli. Il tuo altro codice deve quindi fare riferimento ad essi come loro sottomoduli (ad esempio 'Parser.ConfParser'); se mai si riferisce direttamente a loro (solo 'ConfParser' senza il primo' open'ing 'Parser'), allora le cose si incasineranno. Potresti postare l'output '-verbose' quando non hai' parser.mli'? –
Ho aggiunto di nuovo il file parser.mli. Penso che per qualche ragione un errore durante la compilazione del pacchetto non si è interrotto dove dovrebbe. ** C'era un modulo aggiuntivo nel mio file 'mlpack' che avevo spostato **. – nlucaroni