Recientemente decidí organizar los archivos en el directorio de mi proyecto. Trasladé los analizadores sintácticos que tenía para algunos tipos de archivos diferentes a su propio directorio y también decidí usar ocamlbuild (ya que el proyecto se estaba volviendo más complicado y el sencillo script de shell ya no era suficiente).Compilación adecuada de módulos en subcarpetas (ocamlbuild)
Pude incluir con éxito proyectos externos modificando myocamlbuild con algunas reglas básicas (llamando al ocaml_lib
, usaré ocamlfind en otro momento), pero estoy atascado en cómo incluir la carpeta como un módulo en el proyecto correctamente . Creé un archivo parser.mlpack
y lo llené con los módulos adecuados para incluir (por ejemplo, "analizador/Fecha", etcétera), escribí parser.mli
en la raíz del directorio para sus implementaciones, y modifiqué el archivo _tags
(ver a continuación) .
Durante la compilación, el directorio del analizador se desplaza correctamente, y parser.cmi
, parser.mli.depends
se crearon ambos en el directorio _build
; así como todos los archivos *.cm[xio]
en el subdirectorio de analizadores.
Siento que podría estar haciendo algo redundante, pero independientemente, el proyecto aún no puedo encontrar el módulo Analizador cuando compilo!
Gracias!
_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
error de compilación
/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.
Se dará cuenta de -I parser
no está incluido en la fase de vinculación anterior; en realidad, ¡ninguno de los archivos relacionados con el analizador está incluido!
editar: Se han añadido nuevos detalles de los comentarios y respuestas a continuación.
Sí, esto funcionó, pero no tiene las consecuencias previstas. Un módulo que representa los contenidos del directorio no fue creado; ellos son referenciados por los submódulos directamente. Sin embargo, el argumento '-pack 'se agrega a los módulos apropiados durante la compilación. Pero no se usa en el producto final. ¿Mi interpretación sobre -pack es incorrecta? – nlucaroni
'-pack' debe crear un módulo que contenga los otros módulos como submódulos. Su otro código debe referirse a ellos como sus submódulos (por ejemplo, 'Parser.ConfParser'); si alguna vez se refiere a ellos directamente (solo 'ConfParser' sin primer' open'ing 'Parser'), entonces las cosas se arruinarán. ¿Podría publicar el resultado '-verbose' cuando no tiene' parser.mli'? –
He vuelto a agregar el archivo parser.mli. Creo que por alguna razón un error al compilar el paquete no se rompió donde debería. ** Había un módulo adicional en mi archivo 'mlpack' que había movido **. – nlucaroni