Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
ocamlbuild and packs
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2008-01-31 (13:02)
From: Nicolas Pouillard <nicolas.pouillard@g...>
Subject: Re: [Caml-list] ocamlbuild and packs
Excerpts from Romain Bardou's message of Thu Jan 31 12:55:20 +0100 2008:
> Hello,

> I have this big project I work on, which could be summarized like this:
>     module A
>     module bla/A
>     module bla/B
>     module Main
> The module B in the bla directory depends on the module A of the bla 
> directory. The module Main depends on both modules A and on module B. 
> For some reasons I cannot rename either of the modules.
> So what I do is pack A and B in a Bla module, so I can write Bla.A and 
> Bla.B, using the -pack command line option. It works with my Makefile.
> Now I try to use ocamlbuild, because I really like its approach (I come 
> from the Pascal world where no makefile is needed). So I made this file 
> bla.mlpack containing the lines:
>     A
>     B

bla.mlpack should not be in the bla/ directory, and should contain:


Because you don't want to expose bla to all your modules since you have a name clash.

> Now if I compile using:
>     ocamlbuild Main.byte

Does it works now?


> I can't compile using:
>     ocamlbuild -I bla Main.byte
> Because now the module A is defined twice.


> So I tried to compile using two steps: first, compile bla.cmo, and then, 
> compile Main.byte, but ocamlbuild doesn't seem to be good at that (and 
> actually that's not a bad thing imo). Indeed, if I do:
>     ocamlbuild bla.cmo

You  won't  trick  ocamlbuild  with  this  technique,  but  it's a good way to
specifically found what's should be buildable and is not.


> Now for the questions:
> 1) What is the best way to compile my project? By "best" I mean: with no 
> plugin if possible, with a small _tags file, and as few command line 
> options as possible, while still keeping the spirit of ocamlbuild (for 
> instance, compiling everything in one single call to ocamlbuild if 
> possible).

In  most of cases it will works. However precise directory scopes and packages
contents and scope can be done in a plugin.

> 2) Why doesn't ocamlbuild compile my file bla.mlpack into bla.cmo? In 
> the manual I can read that "%.mlpack" has target "%.cmo".

Yes there is such a rule.

> 3) If ocamlbuild actually did compile bla.cmo, could it use it to 
> compile main.byte or must I build a library bla.cma first?

Yes it will use it.

> Thanks. I would be glad to contribute to the wiki, but I have to 
> understand ocamlbuild first ;)

I would be thankful.

Nicolas Pouillard aka Ertai