2012-03-19 14 views
6

Digamos que tengo un archivo de biblioteca OCaml foo.cma. ¿Hay una herramienta de línea de comandos para imprimir la firma de las funciones y otros tipos definidos allí? La utilidad ocamlbrowser parece estar basada en Windows (se queja de la variable de entorno $ DISPLAY). El caso de uso es que estoy haciendo un:examinar la firma de la biblioteca (.cma) desde la consola

ocamlc -c foo.cma main.ml 

y sale:

File "main.ml", line 13, characters 33-47: 
Error: Unbound value ListUtil.split 

ListUtil.split debe residir en foo.cma pero no sé una herramienta basada en la consola para verificar eso.

Respuesta

9

En Debian/Ubuntu, que tienen "ocamlobjinfo":

ocamlobjinfo stdlib.cma 

mostrará todos los nombres de las unidades incluidas en stdlib.cma. A continuación, puede crear un archivo de resumen:

include SomeModule 

y compilarlo con -i para ver lo que se define en SomeModule módulo.

5

En el nivel superior, acabo de cargar el archivo CMA:

#load "foo.cma";; 

Entonces redefinido un módulo sólo para ver la firma:

module Chunk = Foo;; 
+0

Sí, eso es útil, sin embargo, se supone que uno conoce los nombres de los módulos compilados juntos en el archivo cma. Por ejemplo, si tengo un archivo foo.cma con dos módulos separados, digamos foo1 y foo2, compilado como: 'ocamlc -a foo1.cmo foo2.cmo -o foo.cma', entonces hay una manera de obtener un lista de todos los módulos que se encuentran en el archivo .cma o ¿uno tiene que saber sus nombres por adelantado? Parece extraño en cualquier caso que una utilidad de consola no se proporcione de fábrica. –

+0

Con el método toplevel, puede ver todos los módulos en el archivo cma. Para conocer el módulo por adelantado, debe verificar el archivo mli o, en caso contrario, en el archivo fuente. De lo contrario, no sé realmente cómo hacerlo. – cago

Cuestiones relacionadas