Hi, I can confirm you're not alone, unfortunately. In Frama-C (which uses good ol' make), we have added a new target, dubbed 'smartclean', that removes all orphaned .cm*. More precisely, if there exists a .cm* without a corresponding .ml*, the .cm* is removed. This is quite hackish, and not entirely satisfactory. Still, it's always better than performing a full clean/rebuild. HTH, On Mon, Jun 1, 2015 at 11:52 PM, Josh Watzman wrote: > I've noticed that it's pretty easy to confuse ocamlc/ocamlopt when moving > a module across subdirectories. Here's an example, the most minimized repro > I could get; it uses ocamlbuild, but a similar problem happens if you use > OCamlMakefile and I assume other build systems. > https://gist.github.com/jwatzman/9979951afb5b87304c18 -- running that > will consistently terminate with the dreaded > > > Error: Files main.cmx and a/quux.cmx > > make inconsistent assumptions over interface Quux > > (The script flips the quux module back and forth twice, but that's only to > exhibit the problem on both 4.01 and 4.02; you can get the same problem > with only one move of quux.ml, but which way you need to move it depends > on which version of ocaml you're using.) > > A clean build will of course resolve the problem, but that's quite > annoying to have to go broadcast to a large team, particularly when the > build may take many minutes, and when this problem is specific to the OCaml > parts of our system (a humongous C++ codebase never requires a clean > rebuild). Renaming a module across subdirectories doesn't seem like that > uncommon of an operation. > > The root problem seems to be that ocamlc/ocamlopt are picking up build > artifacts by directory only, and can't be explicitly told which artifacts > to pick up, and so they are picking up the "wrong" quux.cmi/cmx left over > in a build directory, which ocamlbuild should be cleaning up. Is that > right? Is there any way to tell ocamlc/ocamlopt not to do things by > directory, but to be more explicit, for the usages of build systems? > > Not working around this limitation of ocamlc/ocamlopt seems like a bug in > ocamlbuild, no? I'm a bit surprised by it though, given that I've found the > same problem in other build systems -- have other folks not run into this? > How do other teams deal with this, trying to avoid clean builds? > > Thanks! > Josh Watzman > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs -- Boris