1388 lines
33 KiB
HTML
1388 lines
33 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of OCAMLC</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>OCAMLC</H1>
|
|
Section: User Commands (1)<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
<P>
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
ocamlc - The OCaml bytecode compiler
|
|
<P>
|
|
<A NAME="lbAC"> </A>
|
|
<H2>SYNOPSIS</H2>
|
|
|
|
<B>ocamlc</B>
|
|
|
|
[
|
|
<I>options</I>
|
|
|
|
]
|
|
<I>filename ...</I>
|
|
|
|
<P>
|
|
<B>ocamlc.opt</B>
|
|
|
|
[
|
|
<I>options</I>
|
|
|
|
]
|
|
<I>filename ...</I>
|
|
|
|
<P>
|
|
<A NAME="lbAD"> </A>
|
|
<H2>DESCRIPTION</H2>
|
|
|
|
<P>
|
|
The OCaml bytecode compiler
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlc">ocamlc</A></B>(1)
|
|
|
|
compiles OCaml source files to bytecode object files and links
|
|
these object files to produce standalone bytecode executable files.
|
|
These executable files are then run by the bytecode interpreter
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1).
|
|
|
|
<P>
|
|
The
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlc">ocamlc</A></B>(1)
|
|
|
|
command has a command-line interface similar to the one of
|
|
most C compilers. It accepts several types of arguments and processes them
|
|
sequentially, after all options have been processed:
|
|
<P>
|
|
Arguments ending in .mli are taken to be source files for
|
|
compilation unit interfaces. Interfaces specify the names exported by
|
|
compilation units: they declare value names with their types, define
|
|
public data types, declare abstract data types, and so on. From the
|
|
file
|
|
<I>x</I>.mli,
|
|
|
|
the
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlc">ocamlc</A></B>(1)
|
|
|
|
compiler produces a compiled interface
|
|
in the file
|
|
<I>x</I>.cmi.
|
|
|
|
<P>
|
|
Arguments ending in .ml are taken to be source files for compilation
|
|
unit implementations. Implementations provide definitions for the
|
|
names exported by the unit, and also contain expressions to be
|
|
evaluated for their side-effects. From the file
|
|
<I>x</I>.ml,
|
|
|
|
the
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlc">ocamlc</A></B>(1)
|
|
|
|
compiler produces compiled object bytecode in the file
|
|
<I>x</I>.cmo.
|
|
|
|
<P>
|
|
If the interface file
|
|
<I>x</I>.mli
|
|
|
|
exists, the implementation
|
|
<I>x</I>.ml
|
|
|
|
is checked against the corresponding compiled interface
|
|
<I>x</I>.cmi,
|
|
|
|
which is assumed to exist. If no interface
|
|
<I>x</I>.mli
|
|
|
|
is provided, the compilation of
|
|
<I>x</I>.ml
|
|
|
|
produces a compiled interface file
|
|
<I>x</I>.cmi
|
|
|
|
in addition to the compiled object code file
|
|
<I>x</I>.cmo.
|
|
|
|
The file
|
|
<I>x</I>.cmi
|
|
|
|
produced
|
|
corresponds to an interface that exports everything that is defined in
|
|
the implementation
|
|
<I>x</I>.ml.
|
|
|
|
<P>
|
|
Arguments ending in .cmo are taken to be compiled object bytecode. These
|
|
files are linked together, along with the object files obtained
|
|
by compiling .ml arguments (if any), and the OCaml standard
|
|
library, to produce a standalone executable program. The order in
|
|
which .cmo and.ml arguments are presented on the command line is
|
|
relevant: compilation units are initialized in that order at
|
|
run-time, and it is a link-time error to use a component of a unit
|
|
before having initialized it. Hence, a given
|
|
<I>x</I>.cmo
|
|
|
|
file must come before all .cmo files that refer to the unit
|
|
<I>x</I>.
|
|
|
|
<P>
|
|
Arguments ending in .cma are taken to be libraries of object bytecode.
|
|
A library of object bytecode packs in a single file a set of object
|
|
bytecode files (.cmo files). Libraries are built with
|
|
<B>ocamlc -a</B>
|
|
|
|
(see the description of the
|
|
<B>-a</B>
|
|
|
|
option below). The object files
|
|
contained in the library are linked as regular .cmo files (see above),
|
|
in the order specified when the .cma file was built. The only
|
|
difference is that if an object file
|
|
contained in a library is not referenced anywhere in the program, then
|
|
it is not linked in.
|
|
<P>
|
|
Arguments ending in .c are passed to the C compiler, which generates
|
|
a .o object file. This object file is linked with the program if the
|
|
<B>-custom</B>
|
|
|
|
flag is set (see the description of
|
|
<B>-custom</B>
|
|
|
|
below).
|
|
<P>
|
|
Arguments ending in .o or .a are assumed to be C object files and
|
|
libraries. They are passed to the C linker when linking in
|
|
<B>-custom</B>
|
|
|
|
mode (see the description of
|
|
<B>-custom</B>
|
|
|
|
below).
|
|
<P>
|
|
Arguments ending in .so
|
|
are assumed to be C shared libraries (DLLs). During linking, they are
|
|
searched for external C functions referenced from the OCaml code,
|
|
and their names are written in the generated bytecode executable.
|
|
The run-time system
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1)
|
|
|
|
then loads them dynamically at program start-up time.
|
|
<P>
|
|
The output of the linking phase is a file containing compiled bytecode
|
|
that can be executed by the OCaml bytecode interpreter:
|
|
the command
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1).
|
|
|
|
If
|
|
<B>caml.out</B>
|
|
|
|
is the name of the file produced by the linking phase, the command
|
|
<B>ocamlrun caml.out</B>
|
|
|
|
<I>arg1</I> <I> arg2</I> ...<I> argn</I>
|
|
|
|
executes the compiled code contained in
|
|
<B>caml.out</B>,
|
|
|
|
passing it as arguments the character strings
|
|
<I>arg1</I>
|
|
|
|
to
|
|
<I>argn</I>.
|
|
|
|
(See
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1)
|
|
|
|
for more details.)
|
|
<P>
|
|
On most systems, the file produced by the linking
|
|
phase can be run directly, as in:
|
|
<B>./caml.out</B>
|
|
|
|
<I>arg1</I> <I> arg2</I> ...<I> argn</I>.
|
|
|
|
The produced file has the executable bit set, and it manages to launch
|
|
the bytecode interpreter by itself.
|
|
<P>
|
|
<B>ocamlc.opt</B>
|
|
|
|
is the same compiler as
|
|
<B>ocamlc</B>,
|
|
|
|
but compiled with the native-code compiler
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlopt">ocamlopt</A></B>(1).
|
|
|
|
Thus, it behaves exactly like
|
|
<B>ocamlc</B>,
|
|
|
|
but compiles faster.
|
|
<B>ocamlc.opt</B>
|
|
|
|
may not be available in all installations of OCaml.
|
|
<P>
|
|
<A NAME="lbAE"> </A>
|
|
<H2>OPTIONS</H2>
|
|
|
|
<P>
|
|
The following command-line options are recognized by
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlc">ocamlc</A></B>(1).
|
|
|
|
<DL COMPACT>
|
|
<DT id="1"><B>-a</B>
|
|
|
|
<DD>
|
|
Build a library (.cma file) with the object files (.cmo files) given
|
|
on the command line, instead of linking them into an executable
|
|
file. The name of the library must be set with the
|
|
<B>-o</B>
|
|
|
|
option.
|
|
<DT id="2"><DD>
|
|
If
|
|
<B>-custom</B>,<B> -cclib</B> or<B> -ccopt</B>
|
|
|
|
options are passed on the command
|
|
line, these options are stored in the resulting .cma library. Then,
|
|
linking with this library automatically adds back the
|
|
<B>-custom</B>,<B> -cclib</B> and<B> -ccopt</B>
|
|
|
|
options as if they had been provided on the
|
|
command line, unless the
|
|
<B>-noautolink</B>
|
|
|
|
option is given. Additionally, a substring
|
|
<B>$CAMLORIGIN</B>
|
|
|
|
inside a
|
|
<B> -ccopt</B>
|
|
|
|
options will be replaced by the full path to the .cma library,
|
|
excluding the filename.
|
|
<B>-absname</B>
|
|
|
|
Show absolute filenames in error messages.
|
|
<DT id="3"><B>-annot</B>
|
|
|
|
<DD>
|
|
Dump detailed information about the compilation (types, bindings,
|
|
tail-calls, etc). The information for file
|
|
<I>src</I>.ml
|
|
|
|
is put into file
|
|
<I>src</I>.annot.
|
|
|
|
In case of a type error, dump all the information inferred by the
|
|
type-checker before the error. The
|
|
<I>src</I>.annot
|
|
|
|
file can be used with the emacs commands given in
|
|
<B>emacs/caml-types.el</B>
|
|
|
|
to display types and other annotations interactively.
|
|
<DT id="4"><B>-bin-annot</B>
|
|
|
|
<DD>
|
|
Dump detailed information about the compilation (types, bindings,
|
|
tail-calls, etc) in binary format. The information for file
|
|
<I>src</I>.ml
|
|
|
|
is put into file
|
|
<I>src</I>.cmt.
|
|
|
|
In case of a type error, dump
|
|
all the information inferred by the type-checker before the error.
|
|
The annotation files produced by
|
|
<B>-bin-annot</B>
|
|
|
|
contain more information
|
|
and are much more compact than the files produced by
|
|
<B>-annot</B>.
|
|
|
|
<DT id="5"><B>-c</B>
|
|
|
|
<DD>
|
|
Compile only. Suppress the linking phase of the
|
|
compilation. Source code files are turned into compiled files, but no
|
|
executable file is produced. This option is useful to
|
|
compile modules separately.
|
|
<DT id="6"><B>-cc</B><I> ccomp</I>
|
|
|
|
<DD>
|
|
Use
|
|
<I>ccomp</I>
|
|
|
|
as the C linker when linking in "custom runtime" mode (see the
|
|
<B>-custom</B>
|
|
|
|
option) and as the C compiler for compiling .c source files.
|
|
<DT id="7"><B>-cclib -l</B><I>libname</I>
|
|
|
|
<DD>
|
|
Pass the
|
|
<B>-l</B><I>libname</I>
|
|
|
|
option to the C linker when linking in "custom runtime" mode (see the
|
|
<B>-custom</B>
|
|
|
|
option). This causes the given C library to be linked with the program.
|
|
<DT id="8"><B>-ccopt</B><I> option</I>
|
|
|
|
<DD>
|
|
Pass the given
|
|
<I>option</I>
|
|
|
|
to the C compiler and linker, when linking in
|
|
"custom runtime" mode (see the
|
|
<B>-custom</B>
|
|
|
|
option). For instance,
|
|
<B>-ccopt -L</B><I>dir</I>
|
|
|
|
causes the C linker to search for C libraries in
|
|
directory
|
|
<I>dir</I>.
|
|
|
|
<DT id="9"><B>-color</B><I> mode</I>
|
|
|
|
<DD>
|
|
Enable or disable colors in compiler messages (especially warnings and errors).
|
|
The following modes are supported:
|
|
<P>
|
|
<B>auto</B>
|
|
|
|
use heuristics to enable colors only if the output supports them (an
|
|
ANSI-compatible tty terminal);
|
|
<P>
|
|
<B>always</B>
|
|
|
|
enable colors unconditionally;
|
|
<P>
|
|
<B>never</B>
|
|
|
|
disable color output.
|
|
<P>
|
|
The default setting is
|
|
<B>auto,</B>
|
|
|
|
and the current heuristic
|
|
checks that the "TERM" environment variable exists and is
|
|
not empty or "dumb", and that isatty(stderr) holds.
|
|
<P>
|
|
The environment variable "OCAML_COLOR" is considered if -color is not
|
|
provided. Its values are auto/always/never as above.
|
|
<P>
|
|
<DT id="10"><B>-error-style</B><I> mode</I>
|
|
|
|
<DD>
|
|
Control the way error messages and warnings are printed.
|
|
The following modes are supported:
|
|
<P>
|
|
<B>short</B>
|
|
|
|
only print the error and its location;
|
|
<P>
|
|
<B>contextual</B>
|
|
|
|
like "short", but also display the source code snippet corresponding
|
|
to the location of the error.
|
|
<P>
|
|
The default setting is
|
|
<B>contextual.</B>
|
|
|
|
<P>
|
|
The environment variable "OCAML_ERROR_STYLE" is considered if
|
|
-error-style is not provided. Its values are short/contextual as
|
|
above.
|
|
<P>
|
|
<DT id="11"><B>-compat-32</B>
|
|
|
|
<DD>
|
|
Check that the generated bytecode executable can run on 32-bit
|
|
platforms and signal an error if it cannot. This is useful when
|
|
compiling bytecode on a 64-bit machine.
|
|
<DT id="12"><B>-config</B>
|
|
|
|
<DD>
|
|
Print the version number of
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlc">ocamlc</A></B>(1)
|
|
|
|
and a detailed summary of its configuration, then exit.
|
|
<DT id="13"><B>-config-var</B>
|
|
|
|
<DD>
|
|
Print the value of a specific configuration variable
|
|
from the
|
|
<B>-config</B>
|
|
|
|
output, then exit. If the variable does not exist,
|
|
the exit code is non-zero.
|
|
<DT id="14"><B>-custom</B>
|
|
|
|
<DD>
|
|
Link in "custom runtime" mode. In the default linking mode, the
|
|
linker produces bytecode that is intended to be executed with the
|
|
shared runtime system,
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1).
|
|
|
|
In the custom runtime mode, the
|
|
linker produces an output file that contains both the runtime system
|
|
and the bytecode for the program. The resulting file is larger, but it
|
|
can be executed directly, even if the
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1)
|
|
|
|
command is not
|
|
installed. Moreover, the "custom runtime" mode enables linking OCaml
|
|
code with user-defined C functions.
|
|
<P>
|
|
Never use the
|
|
<B><A HREF="/cgi-bin/man/man2html?1+strip">strip</A></B>(1)
|
|
|
|
command on executables produced by
|
|
<B>ocamlc -custom</B>,
|
|
|
|
this would remove the bytecode part of the executable.
|
|
<P>
|
|
Security warning: never set the "setuid" or "setgid" bits on
|
|
executables produced by
|
|
<B>ocamlc -custom</B>,
|
|
|
|
this would make them vulnerable to attacks.
|
|
<DT id="15"><B>-depend ocamldep-args</B>
|
|
|
|
<DD>
|
|
Compute dependencies, as ocamldep would do.
|
|
<DT id="16"><B>-dllib -l</B><I>libname</I>
|
|
|
|
<DD>
|
|
Arrange for the C shared library
|
|
<B>dll</B><I>libname</I><B>.so</B>
|
|
|
|
to be loaded dynamically by the run-time system
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1)
|
|
|
|
at program start-up time.
|
|
<DT id="17"><B>-dllpath</B><I> dir</I>
|
|
|
|
<DD>
|
|
Adds the directory
|
|
<I>dir</I>
|
|
|
|
to the run-time search path for shared
|
|
C libraries. At link-time, shared libraries are searched in the
|
|
standard search path (the one corresponding to the
|
|
<B>-I</B>
|
|
|
|
option).
|
|
The
|
|
<B>-dllpath</B>
|
|
|
|
option simply stores
|
|
<I>dir</I>
|
|
|
|
in the produced
|
|
executable file, where
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1)
|
|
|
|
can find it and use it.
|
|
<DT id="18"><B>-for-pack</B><I> module-path</I>
|
|
|
|
<DD>
|
|
Generate an object file (.cmo file) that can later be included
|
|
as a sub-module (with the given access path) of a compilation unit
|
|
constructed with
|
|
<B>-pack</B>.
|
|
|
|
For instance,
|
|
<B>ocamlc -for-pack P -c A.ml</B>
|
|
|
|
will generate a.cmo that can later be used with
|
|
<B>ocamlc -pack -o P.cmo a.cmo</B>.
|
|
|
|
Note: you can still pack a module that was compiled without
|
|
<B>-for-pack</B>
|
|
|
|
but in this case exceptions will be printed with the wrong names.
|
|
<DT id="19"><B>-g</B>
|
|
|
|
<DD>
|
|
Add debugging information while compiling and linking. This option is
|
|
required in order to be able to debug the program with
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamldebug">ocamldebug</A></B>(1)
|
|
|
|
and to produce stack backtraces when
|
|
the program terminates on an uncaught exception.
|
|
<DT id="20"><B>-i</B>
|
|
|
|
<DD>
|
|
Cause the compiler to print all defined names (with their inferred
|
|
types or their definitions) when compiling an implementation (.ml
|
|
file). No compiled files (.cmo and .cmi files) are produced.
|
|
This can be useful to check the types inferred by the
|
|
compiler. Also, since the output follows the syntax of interfaces, it
|
|
can help in writing an explicit interface (.mli file) for a file: just
|
|
redirect the standard output of the compiler to a .mli file, and edit
|
|
that file to remove all declarations of unexported names.
|
|
<DT id="21"><B>-I</B><I> directory</I>
|
|
|
|
<DD>
|
|
Add the given directory to the list of directories searched for
|
|
compiled interface files (.cmi), compiled object code files
|
|
(.cmo), libraries (.cma), and C libraries specified with
|
|
<B>-cclib -l</B><I>xxx</I>
|
|
|
|
.
|
|
|
|
By default, the current directory is searched first, then the
|
|
standard library directory. Directories added with
|
|
<B>-I</B>
|
|
|
|
are searched
|
|
after the current directory, in the order in which they were given on
|
|
the command line, but before the standard library directory. See also
|
|
option
|
|
<B>-nostdlib</B>.
|
|
|
|
<P>
|
|
If the given directory starts with
|
|
<B>+</B>,
|
|
|
|
it is taken relative to the
|
|
standard library directory. For instance,
|
|
<B>-I +compiler-libs</B>
|
|
|
|
adds the subdirectory
|
|
<B>compiler-libs</B>
|
|
|
|
of the standard library to the search path.
|
|
<DT id="22"><B>-impl</B><I> filename</I>
|
|
|
|
<DD>
|
|
Compile the file
|
|
<I>filename</I>
|
|
|
|
as an implementation file, even if its extension is not .ml.
|
|
<DT id="23"><B>-intf</B><I> filename</I>
|
|
|
|
<DD>
|
|
Compile the file
|
|
<I>filename</I>
|
|
|
|
as an interface file, even if its extension is not .mli.
|
|
<DT id="24"><B>-intf-suffix</B><I> string</I>
|
|
|
|
<DD>
|
|
Recognize file names ending with
|
|
<I>string</I>
|
|
|
|
as interface files (instead of the default .mli).
|
|
<DT id="25"><B>-keep-docs</B>
|
|
|
|
<DD>
|
|
Keep documentation strings in generated .cmi files.
|
|
<DT id="26"><B>-keep-locs</B>
|
|
|
|
<DD>
|
|
Keep locations in generated .cmi files.
|
|
<DT id="27"><B>-labels</B>
|
|
|
|
<DD>
|
|
Labels are not ignored in types, labels may be used in applications,
|
|
and labelled parameters can be given in any order. This is the default.
|
|
<DT id="28"><B>-linkall</B>
|
|
|
|
<DD>
|
|
Force all modules contained in libraries to be linked in. If this
|
|
flag is not given, unreferenced modules are not linked in. When
|
|
building a library (option
|
|
<B>-a</B>),
|
|
|
|
setting the
|
|
<B>-linkall</B>
|
|
|
|
option forces all subsequent links of programs involving that library
|
|
to link all the modules contained in the library.
|
|
When compiling a module (option
|
|
<B>-c</B>),
|
|
|
|
setting the
|
|
<B>-linkall</B>
|
|
|
|
option ensures that this module will
|
|
always be linked if it is put in a library and this library is linked.
|
|
<DT id="29"><B>-make-runtime</B>
|
|
|
|
<DD>
|
|
Build a custom runtime system (in the file specified by option
|
|
<B>-o</B>)
|
|
|
|
incorporating the C object files and libraries given on the command
|
|
line. This custom runtime system can be used later to execute
|
|
bytecode executables produced with the option
|
|
<B>ocamlc -use-runtime</B>
|
|
|
|
<I>runtime-name</I>.
|
|
|
|
<DT id="30"><B>-match-context-rows</B>
|
|
|
|
<DD>
|
|
Set number of rows of context used during pattern matching
|
|
compilation. Lower values cause faster compilation, but
|
|
less optimized code. The default value is 32.
|
|
<DT id="31"><B>-no-alias-deps</B>
|
|
|
|
<DD>
|
|
Do not record dependencies for module aliases.
|
|
<DT id="32"><B>-no-app-funct</B>
|
|
|
|
<DD>
|
|
Deactivates the applicative behaviour of functors. With this option,
|
|
each functor application generates new types in its result and
|
|
applying the same functor twice to the same argument yields two
|
|
incompatible structures.
|
|
<DT id="33"><B>-noassert</B>
|
|
|
|
<DD>
|
|
Do not compile assertion checks. Note that the special form
|
|
<B>assert false</B>
|
|
|
|
is always compiled because it is typed specially.
|
|
This flag has no effect when linking already-compiled files.
|
|
<DT id="34"><B>-noautolink</B>
|
|
|
|
<DD>
|
|
When linking .cma libraries, ignore
|
|
<B>-custom</B>,<B> -cclib</B> and<B> -ccopt</B>
|
|
|
|
options potentially contained in the libraries (if these options were
|
|
given when building the libraries). This can be useful if a library
|
|
contains incorrect specifications of C libraries or C options; in this
|
|
case, during linking, set
|
|
<B>-noautolink</B>
|
|
|
|
and pass the correct C libraries and options on the command line.
|
|
<DT id="35"><B>-nolabels</B>
|
|
|
|
<DD>
|
|
Ignore non-optional labels in types. Labels cannot be used in
|
|
applications, and parameter order becomes strict.
|
|
<DT id="36"><B>-nostdlib</B>
|
|
|
|
<DD>
|
|
Do not automatically add the standard library directory to the list of
|
|
directories searched for compiled interface files (.cmi), compiled
|
|
object code files (.cmo), libraries (.cma), and C libraries specified
|
|
with
|
|
<B>-cclib -l</B><I>xxx</I>
|
|
|
|
.
|
|
|
|
See also option
|
|
<B>-I</B>.
|
|
|
|
<DT id="37"><B>-o</B><I> exec-file</I>
|
|
|
|
<DD>
|
|
Specify the name of the output file produced by the linker. The
|
|
default output name is
|
|
<B>a.out</B>,
|
|
|
|
in keeping with the Unix tradition. If the
|
|
<B>-a</B>
|
|
|
|
option is given, specify the name of the library
|
|
produced. If the
|
|
<B>-pack</B>
|
|
|
|
option is given, specify the name of the
|
|
packed object file produced. If the
|
|
<B>-output-obj</B>
|
|
|
|
option is given,
|
|
specify the name of the output file produced.
|
|
This can also be used when compiling an interface or implementation
|
|
file, without linking, in which case it sets the name of the cmi or
|
|
cmo file, and also sets the module name to the file name up to the
|
|
first dot.
|
|
<DT id="38"><B>-opaque</B>
|
|
|
|
<DD>
|
|
Interface file compiled with this option are marked so that other
|
|
compilation units depending on it will not rely on any implementation
|
|
details of the compiled implementation. The native compiler will not
|
|
access the .cmx file of this unit -- nor warn if it is absent. This can
|
|
improve speed of compilation, for both initial and incremental builds,
|
|
at the expense of performance of the generated code.
|
|
<DT id="39"><B>-open</B><I> module</I>
|
|
|
|
<DD>
|
|
Opens the given module before processing the interface or
|
|
implementation files. If several
|
|
<B>-open</B>
|
|
|
|
options are given, they are processed in order, just as if
|
|
the statements open! module1;; ... open! moduleN;; were added
|
|
at the top of each file.
|
|
<DT id="40"><B>-output-obj</B>
|
|
|
|
<DD>
|
|
Cause the linker to produce a C object file instead of a bytecode
|
|
executable file. This is useful to wrap OCaml code as a C library,
|
|
callable from any C program. The name of the output object file
|
|
must be set with the
|
|
<B>-o</B>
|
|
|
|
option. This
|
|
option can also be used to produce a C source file (.c extension) or
|
|
a compiled shared/dynamic library (.so extension).
|
|
<DT id="41"><B>-pack</B>
|
|
|
|
<DD>
|
|
Build a bytecode object file (.cmo file) and its associated compiled
|
|
interface (.cmi) that combines the object
|
|
files given on the command line, making them appear as sub-modules of
|
|
the output .cmo file. The name of the output .cmo file must be
|
|
given with the
|
|
<B>-o</B>
|
|
|
|
option. For instance,
|
|
<B>ocamlc -pack -o p.cmo a.cmo b.cmo c.cmo</B>
|
|
|
|
generates compiled files p.cmo and p.cmi describing a compilation
|
|
unit having three sub-modules A, B and C, corresponding to the
|
|
contents of the object files a.cmo, b.cmo and c.cmo. These
|
|
contents can be referenced as P.A, P.B and P.C in the remainder
|
|
of the program.
|
|
<DT id="42"><B>-plugin</B><I> plugin</I>
|
|
|
|
<DD>
|
|
Dynamically load the code of the given
|
|
<I>plugin</I>
|
|
|
|
(a .cmo, .cma or .cmxs file) in the compiler. The plugin must exist in
|
|
the same kind of code as the compiler (ocamlc.byte must load bytecode
|
|
plugins, while ocamlc.opt must load native code plugins), and
|
|
extension adaptation is done automatically for .cma files (to .cmxs files
|
|
if the compiler is compiled in native code).
|
|
<DT id="43"><B>-pp</B><I> command</I>
|
|
|
|
<DD>
|
|
Cause the compiler to call the given
|
|
<I>command</I>
|
|
|
|
as a preprocessor for each source file. The output of
|
|
<I>command</I>
|
|
|
|
is redirected to
|
|
an intermediate file, which is compiled. If there are no compilation
|
|
errors, the intermediate file is deleted afterwards. The name of this
|
|
file is built from the basename of the source file with the
|
|
extension .ppi for an interface (.mli) file and .ppo for an
|
|
implementation (.ml) file.
|
|
<DT id="44"><B>-ppx</B><I> command</I>
|
|
|
|
<DD>
|
|
After parsing, pipe the abstract syntax tree through the preprocessor
|
|
<I>command</I>.
|
|
|
|
The module
|
|
<B><A HREF="/cgi-bin/man/man2html?3+Ast_mapper">Ast_mapper</A></B>(3)
|
|
|
|
implements the external interface of a preprocessor.
|
|
<DT id="45"><B>-principal</B>
|
|
|
|
<DD>
|
|
Check information path during type-checking, to make sure that all
|
|
types are derived in a principal way. When using labelled arguments
|
|
and/or polymorphic methods, this flag is required to ensure future
|
|
versions of the compiler will be able to infer types correctly, even
|
|
if internal algorithms change.
|
|
All programs accepted in
|
|
<B>-principal</B>
|
|
|
|
mode are also accepted in the
|
|
default mode with equivalent types, but different binary signatures,
|
|
and this may slow down type checking; yet it is a good idea to
|
|
use it once before publishing source code.
|
|
<DT id="46"><B>-rectypes</B>
|
|
|
|
<DD>
|
|
Allow arbitrary recursive types during type-checking. By default,
|
|
only recursive types where the recursion goes through an object type
|
|
are supported. Note that once you have created an interface using this
|
|
flag, you must use it again for all dependencies.
|
|
<DT id="47"><B>-runtime-variant</B><I> suffix</I>
|
|
|
|
<DD>
|
|
Add
|
|
<I>suffix</I>
|
|
|
|
to the name of the runtime library that will be used by the program.
|
|
If OCaml was configured with option
|
|
<B>-with-debug-runtime</B>,
|
|
|
|
then the
|
|
<B>d</B>
|
|
|
|
suffix is supported and gives a debug version of the runtime.
|
|
<DT id="48"><B>-stop-after</B><I> pass</I>
|
|
|
|
<DD>
|
|
Stop compilation after the given compilation pass. The currently
|
|
supported passes are:
|
|
<B>parsing</B>,
|
|
|
|
<B>typing</B>.
|
|
|
|
<DT id="49"><B>-safe-string</B>
|
|
|
|
<DD>
|
|
Enforce the separation between types
|
|
<B>string</B> and <B>bytes</B>,
|
|
|
|
thereby making strings read-only. This is the default.
|
|
<DT id="50"><B>-short-paths</B>
|
|
|
|
<DD>
|
|
When a type is visible under several module-paths, use the shortest
|
|
one when printing the type's name in inferred interfaces and error and
|
|
warning messages.
|
|
<DT id="51"><B>-strict-sequence</B>
|
|
|
|
<DD>
|
|
Force the left-hand part of each sequence to have type unit.
|
|
<DT id="52"><B>-unboxed-types</B>
|
|
|
|
<DD>
|
|
When a type is unboxable (i.e. a record with a single argument or a
|
|
concrete datatype with a single constructor of one argument) it will
|
|
be unboxed unless annotated with
|
|
<B>[@@ocaml.boxed]</B>.
|
|
|
|
<DT id="53"><B>-no-unboxed-types</B>
|
|
|
|
<DD>
|
|
When a type is unboxable it will be boxed unless annotated with
|
|
<B>[@@ocaml.unboxed]</B>.
|
|
|
|
This is the default.
|
|
<DT id="54"><B>-unsafe</B>
|
|
|
|
<DD>
|
|
Turn bound checking off for array and string accesses (the
|
|
<B>v.(i)</B>and<B>s.[i]</B>
|
|
|
|
constructs). Programs compiled with
|
|
<B>-unsafe</B>
|
|
|
|
are therefore
|
|
slightly faster, but unsafe: anything can happen if the program
|
|
accesses an array or string outside of its bounds.
|
|
<DT id="55"><B>-unsafe-string</B>
|
|
|
|
<DD>
|
|
Identify the types
|
|
<B>string</B> and <B>bytes</B>,
|
|
|
|
thereby making strings writable.
|
|
This is intended for compatibility with old source code and should not
|
|
be used with new software.
|
|
<DT id="56"><B>-use-runtime</B><I> runtime-name</I>
|
|
|
|
<DD>
|
|
Generate a bytecode executable file that can be executed on the custom
|
|
runtime system
|
|
<I>runtime-name</I>,
|
|
|
|
built earlier with
|
|
<B>ocamlc -make-runtime</B>
|
|
|
|
<I>runtime-name</I>.
|
|
|
|
<DT id="57"><B>-v</B>
|
|
|
|
<DD>
|
|
Print the version number of the compiler and the location of the
|
|
standard library directory, then exit.
|
|
<DT id="58"><B>-verbose</B>
|
|
|
|
<DD>
|
|
Print all external commands before they are executed, in particular
|
|
invocations of the C compiler and linker in
|
|
<B>-custom</B>
|
|
|
|
mode. Useful to debug C library problems.
|
|
<DT id="59"><B>-vmthread</B>
|
|
|
|
<DD>
|
|
Deprecated since OCaml 4.08.0. Compile or link multithreaded programs,
|
|
in combination with the VM-level threads library described in
|
|
<I>The OCaml user's manual</I>.
|
|
|
|
<DT id="60"><B>-vnum</B> or <B>-version</B>
|
|
|
|
<DD>
|
|
Print the version number of the compiler in short form (e.g. "3.11.0"),
|
|
then exit.
|
|
<DT id="61"><B>-w</B><I> warning-list</I>
|
|
|
|
<DD>
|
|
Enable, disable, or mark as fatal the warnings specified by the argument
|
|
<I>warning-list</I>.
|
|
|
|
<P>
|
|
Each warning can be
|
|
<I>enabled</I> or <I>disabled</I>,
|
|
|
|
and each warning can be
|
|
<I>fatal</I>or
|
|
|
|
<I>non-fatal</I>.
|
|
|
|
If a warning is disabled, it isn't displayed and doesn't affect
|
|
compilation in any way (even if it is fatal). If a warning is enabled,
|
|
it is displayed normally by the compiler whenever the source code
|
|
triggers it. If it is enabled and fatal, the compiler will also stop
|
|
with an error after displaying it.
|
|
<P>
|
|
The
|
|
<I>warning-list</I>
|
|
|
|
argument is a sequence of warning specifiers, with no separators
|
|
between them. A warning specifier is one of the following:
|
|
<P>
|
|
<B>+</B><I>num</I>
|
|
|
|
Enable warning number
|
|
<I>num</I>.
|
|
|
|
<P>
|
|
<B>-</B><I>num</I>
|
|
|
|
Disable warning number
|
|
<I>num</I>.
|
|
|
|
<P>
|
|
<B>@</B><I>num</I>
|
|
|
|
Enable and mark as fatal warning number
|
|
<I>num</I>.
|
|
|
|
<P>
|
|
<B>+</B><I>num1</I><B>..</B><I>num2</I>
|
|
|
|
Enable all warnings between
|
|
<I>num1</I>
|
|
|
|
and
|
|
<I>num2</I>
|
|
|
|
(inclusive).
|
|
<P>
|
|
<B>-</B><I>num1</I><B>..</B><I>num2</I>
|
|
|
|
Disable all warnings between
|
|
<I>num1</I>
|
|
|
|
and
|
|
<I>num2</I>
|
|
|
|
(inclusive).
|
|
<P>
|
|
<B>@</B><I>num1</I><B>..</B><I>num2</I>
|
|
|
|
Enable and mark as fatal all warnings between
|
|
<I>num1</I>
|
|
|
|
and
|
|
<I>num2</I>
|
|
|
|
(inclusive).
|
|
<P>
|
|
<B>+</B><I>letter</I>
|
|
|
|
Enable the set of warnings corresponding to
|
|
<I>letter</I>.
|
|
|
|
The letter may be uppercase or lowercase.
|
|
<P>
|
|
<B>-</B><I>letter</I>
|
|
|
|
Disable the set of warnings corresponding to
|
|
<I>letter</I>.
|
|
|
|
The letter may be uppercase or lowercase.
|
|
<P>
|
|
<B>@</B><I>letter</I>
|
|
|
|
Enable and mark as fatal the set of warnings corresponding to
|
|
<I>letter</I>.
|
|
|
|
The letter may be uppercase or lowercase.
|
|
<P>
|
|
<I>uppercase-letter</I>
|
|
|
|
Enable the set of warnings corresponding to
|
|
<I>uppercase-letter</I>.
|
|
|
|
<P>
|
|
<I>lowercase-letter</I>
|
|
|
|
Disable the set of warnings corresponding to
|
|
<I>lowercase-letter</I>.
|
|
|
|
<P>
|
|
The warning numbers are as follows.
|
|
<P>
|
|
1
|
|
Suspicious-looking start-of-comment mark.
|
|
<P>
|
|
2
|
|
Suspicious-looking end-of-comment mark.
|
|
<P>
|
|
3
|
|
Deprecated feature.
|
|
<P>
|
|
4
|
|
Fragile pattern matching: matching that will remain
|
|
complete even if additional constructors are added to one of the
|
|
variant types matched.
|
|
<P>
|
|
5
|
|
Partially applied function: expression whose result has
|
|
function type and is ignored.
|
|
<P>
|
|
6
|
|
Label omitted in function application.
|
|
<P>
|
|
7
|
|
Method overridden without using the "method!" keyword
|
|
<P>
|
|
8
|
|
Partial match: missing cases in pattern-matching.
|
|
<P>
|
|
9
|
|
Missing fields in a record pattern.
|
|
<P>
|
|
10
|
|
Expression on the left-hand side of a sequence that doesn't
|
|
have type
|
|
<B>unit</B>
|
|
|
|
(and that is not a function, see warning number 5).
|
|
<P>
|
|
11
|
|
Redundant case in a pattern matching (unused match case).
|
|
<P>
|
|
12
|
|
Redundant sub-pattern in a pattern-matching.
|
|
<P>
|
|
13
|
|
Override of an instance variable.
|
|
<P>
|
|
14
|
|
Illegal backslash escape in a string constant.
|
|
<P>
|
|
15
|
|
Private method made public implicitly.
|
|
<P>
|
|
16
|
|
Unerasable optional argument.
|
|
<P>
|
|
17
|
|
Undeclared virtual method.
|
|
<P>
|
|
18
|
|
Non-principal type.
|
|
<P>
|
|
19
|
|
Type without principality.
|
|
<P>
|
|
20
|
|
Unused function argument.
|
|
<P>
|
|
21
|
|
Non-returning statement.
|
|
<P>
|
|
22
|
|
Preprocessor warning.
|
|
<P>
|
|
23
|
|
Useless record
|
|
<B>with</B>
|
|
|
|
clause.
|
|
<P>
|
|
24
|
|
Bad module name: the source file name is not a valid OCaml module name.
|
|
<P>
|
|
25
|
|
Deprecated: now part of warning 8.
|
|
<P>
|
|
26
|
|
Suspicious unused variable: unused variable that is bound with
|
|
<B>let</B> or<B> as</B>,
|
|
|
|
and doesn't start with an underscore (_) character.
|
|
<P>
|
|
27
|
|
Innocuous unused variable: unused variable that is not bound with
|
|
<B>let</B> nor<B> as</B>,
|
|
|
|
and doesn't start with an underscore (_) character.
|
|
<P>
|
|
28
|
|
A pattern contains a constant constructor applied to the underscore (_)
|
|
pattern.
|
|
<P>
|
|
29
|
|
A non-escaped end-of-line was found in a string constant. This may
|
|
cause portability problems between Unix and Windows.
|
|
<P>
|
|
30
|
|
Two labels or constructors of the same name are defined in two
|
|
mutually recursive types.
|
|
<P>
|
|
31
|
|
A module is linked twice in the same executable.
|
|
<P>
|
|
32
|
|
Unused value declaration.
|
|
<P>
|
|
33
|
|
Unused open statement.
|
|
<P>
|
|
34
|
|
Unused type declaration.
|
|
<P>
|
|
35
|
|
Unused for-loop index.
|
|
<P>
|
|
36
|
|
Unused ancestor variable.
|
|
<P>
|
|
37
|
|
Unused constructor.
|
|
<P>
|
|
38
|
|
Unused extension constructor.
|
|
<P>
|
|
39
|
|
Unused rec flag.
|
|
<P>
|
|
40
|
|
Constructor or label name used out of scope.
|
|
<P>
|
|
41
|
|
Ambiguous constructor or label name.
|
|
<P>
|
|
42
|
|
Disambiguated constructor or label name.
|
|
<P>
|
|
43
|
|
Nonoptional label applied as optional.
|
|
<P>
|
|
44
|
|
Open statement shadows an already defined identifier.
|
|
<P>
|
|
45
|
|
Open statement shadows an already defined label or constructor.
|
|
<P>
|
|
46
|
|
Error in environment variable.
|
|
<P>
|
|
47
|
|
Illegal attribute payload.
|
|
<P>
|
|
48
|
|
Implicit elimination of optional arguments.
|
|
<P>
|
|
49
|
|
Missing cmi file when looking up module alias.
|
|
<P>
|
|
50
|
|
Unexpected documentation comment.
|
|
<P>
|
|
59
|
|
Assignment on non-mutable value.
|
|
<P>
|
|
60
|
|
Unused module declaration.
|
|
<P>
|
|
61
|
|
Unannotated unboxable type in primitive declaration.
|
|
<P>
|
|
62
|
|
Type constraint on GADT type declaration
|
|
<P>
|
|
63
|
|
Erroneous printed signature
|
|
<P>
|
|
64
|
|
-unsafe used with a preprocessor returning a syntax tree
|
|
<P>
|
|
65
|
|
Type declaration defining a new '()' constructor
|
|
<P>
|
|
66
|
|
Unused open! statement.
|
|
<P>
|
|
The letters stand for the following sets of warnings. Any letter not
|
|
mentioned here corresponds to the empty set.
|
|
<P>
|
|
<B>A</B>
|
|
|
|
all warnings
|
|
<P>
|
|
<B>C</B>
|
|
|
|
1, 2
|
|
<P>
|
|
<B>D</B>
|
|
|
|
3
|
|
<P>
|
|
<B>E</B>
|
|
|
|
4
|
|
<P>
|
|
<B>F</B>
|
|
|
|
5
|
|
<P>
|
|
<B>K</B>
|
|
|
|
32, 33, 34, 35, 36, 37, 38, 39
|
|
<P>
|
|
<B>L</B>
|
|
|
|
6
|
|
<P>
|
|
<B>M</B>
|
|
|
|
7
|
|
<P>
|
|
<B>P</B>
|
|
|
|
8
|
|
<P>
|
|
<B>R</B>
|
|
|
|
9
|
|
<P>
|
|
<B>S</B>
|
|
|
|
10
|
|
<P>
|
|
<B>U</B>
|
|
|
|
11, 12
|
|
<P>
|
|
<B>V</B>
|
|
|
|
13
|
|
<P>
|
|
<B>X</B>
|
|
|
|
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 30
|
|
<P>
|
|
<B>Y</B>
|
|
|
|
26
|
|
<P>
|
|
<B>Z</B>
|
|
|
|
27
|
|
<P>
|
|
<DT id="62"><DD>
|
|
The default setting is
|
|
<B>-w +a-4-6-7-9-27-29-32..42-44-45-48-50-60-66</B>.
|
|
|
|
Note that warnings
|
|
<B>5</B> and<B> 10</B>
|
|
|
|
are not always triggered, depending on the internals of the type checker.
|
|
<DT id="63"><B>-warn-error</B><I> warning-list</I>
|
|
|
|
<DD>
|
|
Mark as errors the warnings specified in the argument
|
|
<I>warning-list</I>.
|
|
|
|
The compiler will stop with an error when one of these
|
|
warnings is emitted. The
|
|
<I>warning-list</I>
|
|
|
|
has the same meaning as for
|
|
the
|
|
<B>-w</B>
|
|
|
|
option: a
|
|
<B>+</B>
|
|
|
|
sign (or an uppercase letter) marks the corresponding warnings as fatal, a
|
|
<B>-</B>
|
|
|
|
sign (or a lowercase letter) turns them back into non-fatal warnings, and a
|
|
<B>@</B>
|
|
|
|
sign both enables and marks as fatal the corresponding warnings.
|
|
<P>
|
|
Note: it is not recommended to use the
|
|
<B>-warn-error</B>
|
|
|
|
option in production code, because it will almost certainly prevent
|
|
compiling your program with later versions of OCaml when they add new
|
|
warnings or modify existing warnings.
|
|
<P>
|
|
The default setting is
|
|
<B>-warn-error -a+31</B>
|
|
|
|
(only warning 31 is fatal).
|
|
<DT id="64"><B>-warn-help</B>
|
|
|
|
<DD>
|
|
Show the description of all available warning numbers.
|
|
<DT id="65"><B>-where</B>
|
|
|
|
<DD>
|
|
Print the location of the standard library, then exit.
|
|
<DT id="66"><B>-</B><I> file</I>
|
|
|
|
<DD>
|
|
Process
|
|
<I>file</I>
|
|
|
|
as a file name, even if it starts with a dash (-) character.
|
|
<DT id="67"><B>-help</B> or<B> --help</B>
|
|
|
|
<DD>
|
|
Display a short usage summary and exit.
|
|
<P>
|
|
</DL>
|
|
<A NAME="lbAF"> </A>
|
|
<H2>SEE ALSO</H2>
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+ocamlopt">ocamlopt</A></B>(1),<B> <A HREF="/cgi-bin/man/man2html?1+ocamlrun">ocamlrun</A></B>(1),<B> <A HREF="/cgi-bin/man/man2html?1+ocaml">ocaml</A></B>(1).
|
|
|
|
<BR>
|
|
|
|
<I>The OCaml user's manual</I>,
|
|
|
|
chapter "Batch compilation".
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="68"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="69"><A HREF="#lbAC">SYNOPSIS</A><DD>
|
|
<DT id="70"><A HREF="#lbAD">DESCRIPTION</A><DD>
|
|
<DT id="71"><A HREF="#lbAE">OPTIONS</A><DD>
|
|
<DT id="72"><A HREF="#lbAF">SEE ALSO</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:20 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|