Version française
Home     About     Download     Resources     Contact us    
Browse thread
ocamlopt and ocamldep
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <leroy@w...>
Subject: Re: ocamlopt and ocamldep
> The ocamldep utility in OCaml 2.0 creates for a file concept.mli that
> uses modules Bitrelation and Bitset a dependency of the following
> form:
> 
>         concept.cmi: bitrelation.cmo bitset.cmo

This is because bitrelation and bitset do not have an explicit
interface (.mli file).  So, their interfaces actually depend on 
their source file (.ml file), but "make" has a hard time understanding
this; the dependency on the .cmo above is what I've found to be
most understandable to "make".

> When compiling for native code this causes uncessessary recompilations 
> of the files bitrelation.ml and bitset.ml:
> bitset.ml and bitrelation are already compiled to *.cmx, *.cmi, and
> *.o. Because of the dependency generated by ocamldep they get
> recompiled using the *byte* code compiler and thus new *.cmi files are
> created as well.
> Should cmi-files depend on cmx-files when compiling for native code?

My feeling is that it would complicate the Makefiles for a fairly
small benefit.  If you don't like the occasional calls to ocamlc, you
could write .mli files for all your modules (it's good style anyway).

> This does not matter in most cases since OCaml compiles very fast. I
> suspect the recompilation to cause subtle 'inconsistent assumptions
> over interface' errors in conjunction with -unsave -noassert compiler
> flags. However, I was not able to find a small example for this mail
> that reproduces the error.

If you can find one, please send it and I'll look at the problem.

Regards,

- Xavier Leroy