[mercury-users] Separate compilation for submodules.

Guillaume Yziquel guillaume.yziquel at citycable.ch
Wed Jun 29 05:24:23 AEST 2011


Le Sunday 26 Jun 2011 à 16:47:18 (+1000), Julien Fischer a écrit :
> 
> Hi,
> 
> On Sat, 25 Jun 2011, Guillaume Yziquel wrote:
> 
> >I've been struggling a bit with submodules, and would appreciate if you
> >could provide a small working example of how to do the following:
> >
> >I want a module A, and a submodule A.B. I would like to compile
> >interfaces with mmc --make-int and mmc --make-short-int.
> 
> I don't recommend trying to use those options directly when trying to
> build (parts of) multi-module programs.  They exist mainly for the use
> of mmake and mmc --make.  Using them directly is likely to result in
> inconsistencies amongst the generated files, e.g. because you forgot to
> update rebuild the interface files when something changes.
> 
> >After that, I would like to compile them to C. I do not wish to use
> >mmc --make.
> 
> Why not?  It is the intended way of building multi-module Mercury programs.
> (It can certainly do everything you want here.)

Essentially because I haven't been able to make it work satisfactorily
for now. And because building thing manually was a more straightforward
way at first.

> >I also want two separate files, a.m and a.b.m and I'd wish to use the
> >:- include_module declaration.
> >
> >How can I do that cleanly? The module system is baffling me somewhat...
> 
> In file a.m:
> 
>     :- module a.
>     :- interface.
>     :- include_module b.
>     :- type foo ---> foo.
>     :- end_module a.
> 
> In file a.b.m:
> 
>     :- module a.b.
>     :- interface.
>     :- type bar ---> bar.
>     :- end_module b.
> 
> To build the C source files and interface files for the above modules
> we have three choices:
> 
> (1) Do it manually (NOT RECOMMENDED)
> (2) Use mmake
> (3) Use mmc --make
> 
> For (1), we invoke the compiler as follows:
> 
>    $ mmc --make-short-int a.m
>    $ mmc --make-short-int a.b.m.
>    $ mmc --make-priv-int a.m
>    $ mmc --make-int a.m
>    $ mmc --make-int a.b.m
>    $ mmc -C a.m
>    $ mmc -C a.b.m
> 
> For (2):
> 
>    $ mmake a.depend
>    $ mmake a.int
>    $ mmake a.b.int
>    $ mmake a.c
>    $ mmake a.b.c
> 
> For (3):
> 
>    $ mmc --make a.cs
>    $ mmc --make a.int
>    $ mmc --make a.b.int
> 
> mmc --make will place all generated intermediate files in a
> subdirectory named "Mercury";  the C source files will be in the
> subdirectory Mercury/cs and the interface files in the directory
> Mercury/ints.
> 
> (The .cs target for mmc --make tells it to build all the C source files
> required in order to build the program a.)

Thank you so much. Doing things manually for now, but I'll no doubt use
--make in the future. This has been very helpful.

> Julien.

-- 
     Guillaume Yziquel

--------------------------------------------------------------------------
mercury-users mailing list
Post messages to:       mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions:          mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the users mailing list