---
name: "eliomcp"
section: "1"
platform: "linux"
package: "eliom"
version: "9.4.0-2+b8"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/eliomcp"
---

# eliomcp(1)

the eliom build tools

## NAME

eliomc, eliomcp, eliomopt, js\_of\_eliom, eliomdep - the eliom build tools

## SYNOPSIS

**eliomc** \[*options*\] files

**eliomcp** \[*options*\] files

**eliomopt** \[*options*\] files

**eliomdep** \[*options*\] files

**eliomdoc** \[*options*\] files

**eliompp** \[*-client*\|*-server*\] files

**js\_of\_eliom** \[*options*\] files -o filename.js

## DESCRIPTION

**eliomc,** **eliomcp** and **eliomopt** are wrapper around the OCaml compiler that ease the compilation of the server part of projects based on the Eliom framework. They respectively accept the same set of option than the [**ocamlc**(1)](/ocamlc/1.md),[**ocamlcp**(1)](/ocamlcp/1.md) and [**ocamlopt**(1)](/ocamlopt/1.md) compilers plus the specific ones described in the *OPTIONS* section.

**js\_of\_eliom** is a wrapper around the OCaml and Js\_of\_ocaml compilers that ease the compilation of the client part of projects based on the Eliom framework. It accepts the same set of option than the [**ocamlc**(1)](/ocamlc/1.md) compiler plus the specific ones described in the *OPTIONS* section.

**eliomdep** is a wrapper around [**ocamldep**(1)](/ocamldep/1.md) that handles dependencies of an .eliom source files. It accepts the same set of options plus the specific ones described in the *OPTIONS* section. It makes the assumption that server-side compiled modules of OCaml files located in this directory subtree are in directory *\_server* (with same subdirectories structure) (resp. in directory *\_client* for client-side compiled modules).

**eliompp (EXPERIMENTAL)** is a preprocessor which remove specific sections, depending on the given option. The option **-client** will remove all the top-level parts and server sections and the option **-server** will remove only the client sections.

**eliomdoc (EXPERIMENTAL)** is a wrapper around the OCaml documentation generator **ocamldoc.** It allows you to generate documentation from **client** or **server** side. It accepts the same set of option than [**ocamldoc**(1)](/ocamldoc/1.md). It automatically extracts the commentaries from the desired sections. **eliomdoc** is currently experimental, and you could find some undefined behaviours. (see http://ocsigen.org/eliom/manual/workflow-compilation). Some well known bugs are:\

- •

  your files should always begin with a value and not with a comment. Otherwise, camlp4 won't output the commentaries.\

- •

  sometimes, comment node are not attached as expected. That's because camlp4 (sometimes) remove extra new line between value elements.

## COMPILING ELIOM SOURCE FILES

The compilation of files with a .eliom extension is achieved in three steps: infer the type of value sent by the server to the client; compile the server part of the code and compile the client part. The first two steps can be realised with **eliomc** and the last one with **js\_of\_eliom.**

Both tools produce a .cmo file named as the original .eliom file. To avoid overwriting the .cmo representing the server part with .cmo of the client part, files generated by **eliomc** or **eliomopt** are stored by default in a subdirectory named \_server and files generated by **js\_of\_eliom** are stored in a subdirectory named \_client. Those default directories could be respectively overridden by the environment variables ELIOM\_SERVER\_DIR and ELIOM\_CLIENT\_DIR.

The types inferred by **eliomc** for values sent by the server to the client are stored in an intermediate files named as the original .eliom file and whose extension is .type\_mli. That file is required by **js\_of\_eliom** for compiling the client part of the .eliom file. The **eliomdep** tool correctly generate dependencies that intermediate file for the server .cmo and the client .cmo.

## OPTIONS

**-eliom-inc \<dir\>** Add \<dir\> to the list of eliom include directories (eliomdep only).

-

  - **-dir \<dir\>**

  Specify the target directory for generated files

- **-package \<name\>**

  This is the same option as the ocamlfind one.

- **-predicates \<p\>**

  This is the same option as the ocamlfind one.

- **-no-autoload**

  Do not load commonly used syntax extensions (ppx\_deriving, lwt, js\_of\_ocaml, tyxml).

- **-type-conv**

  Use type\_conv syntax extensions instead of deriving one. It has no effect if used in conjunction with -no-autoload.

- **-ppopt \<opt\>**

  Append \<opt\> to preprocessor invocation.

- **-jsopt \<opt\>**

  Append \<opt\> to js\_of\_ocaml invocation (js\_of\_eliom only).

- **-infer \<opt\>**

  For .eliom file, only generate the intermediate .type\_mli file (eliomc and eliomopt only).

- **-noinfer \<opt\>**

  For .eliom file, do not generate the intermediate .type\_mli file (eliomc and eliomopt only).

- **-help** or **--help**

  Display a short usage summary and exit.

## EXAMPLES

The compilation of an Eliom projects composed of a server specific file named server.ml, a client specific file named client.ml and two common files name base.eliom and main.eliom, could be achieved with the following commands:

    eliomc -a -o appl.cma server.ml base.eliom main.eliom\
     js\_of\_eliom -o appl.js client.ml base.eliom main.eliom

To avoid recompiling the whole project each times, this could be split in multiple steps:

    eliomc -c server.ml\
     eliomc -c base.eliom\
     eliomc -c main.eliom\
     eliomc -a -o appl.cma \_server/server.cmo \_server/base.cmo \_server/main.cmo\
     js\_of\_eliom -c client.ml\
     js\_of\_eliom -c base.eliom\
     js\_of\_eliom -c main.eliom\
     js\_of\_eliom -o appl.js \_client/client.cmo \_client/base.cmo \_client/main.cmo

## SEE ALSO

[**ocamlc**(1)](/ocamlc/1.md), [**ocamlopt**(1)](/ocamlopt/1.md), [**js\_of\_ocaml**(1)](/js_of_ocaml/1.md), [**ocamlfind**(1)](/ocamlfind/1.md), [**ocamlcp**(1)](/ocamlcp/1.md), [**ocamldep**(1)](/ocamldep/1.md).

## AUTHOR

eliomc, js\_of\_eliom, eliomdep and eliomopt were written by Gregoire Henry \<gregoire.henry@pps.jussieu.fr\>.

eliomdoc was written by Charly Chevalier \<charly.n.chevalier@gmail.com\>.

This manual page was written by Pierre Chambart \<chambart@crans.org\>.
