ocamlc (1)





NAME

       ocamlc - The Objective Caml bytecode compiler


SYNOPSIS

       ocamlc  [  -aciv  ]  [ -cclib libname ] [ -ccopt option ] [ -custom ] [
       -unsafe ] [ -o exec-file ] [ -I lib-dir ] filename ...

       ocamlc.opt (same options)


DESCRIPTION

       The Objective Caml bytecode compiler  ocamlc(1)  compiles  Caml  source
       files  to  bytecode object files and link these object files to produce
       standalone bytecode executable files.  These executable files are  then
       run by the bytecode interpreter ocamlrun(1).

       The  ocamlc(1)  command has a command-line interface similar to the one
       of most C compilers. It accepts several types of arguments:

       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 x.mli, the
       ocamlc(1) compiler produces a compiled interface in the file x.cmi.

       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 x.ml, the ocamlc(1) compiler pro-
       duces compiled object bytecode in the file x.cmo.

       If the interface file x.mli exists, the implementation x.ml is  checked
       against the corresponding compiled interface x.cmi, which is assumed to
       exist. If no interface x.mli is provided, the compilation of x.ml  pro-
       duces  a  compiled  interface  file  x.cmi  in addition to the compiled
       object code file x.cmo.  The file  x.cmi  produced  corresponds  to  an
       interface that exports everything that is defined in the implementation
       x.ml.

       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  Caml  Light  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  initial-
       ized it. Hence, a given x.cmo file must come before all .cmo files that
       refer to the unit x.

       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  ocamlc  -a  (see
       the  description of the -a option below). The object files contained in
       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 -custom mode
       (see the description of -custom below).

       ocamlc.opt  is  the  same  compiler  as  ocamlc,  but compiled with the
       native-code  compiler  ocamlopt(1).   Thus,  it  behaves  exactly  like
       ocamlc,  but  compiles  faster.   ocamlc.opt  is  not  available in all
       installations of Objective Caml.


OPTIONS

       The following command-line options are recognized by ocamlc(1).

       -a     Build a library (.cma file) with the object files  (.cmo  files)
              given  on the command line, instead of linking them into an exe-
              cutable file. The name of the library can be  set  with  the  -o
              option. The default name is library.cma.

       -c     Compile  only.  Suppress  the  linking phase of the compilation.
              Source code files are turned into compiled files,  but  no  exe-
              cutable  file is produced. This option is useful to compile mod-
              ules separately.

       -cclib -llibname
              Pass the -llibname option to the C linker when linking in ``cus-
              tom  runtime''  mode  (see  the -custom option). This causes the
              given C library to be linked with the program.

       -ccopt Pass the given option to the C compiler and linker, when linking
              in  ``custom  runtime''  mode  (see  the  -custom  option).  For
              instance, -ccopt -L dir causes the C  linker  to  search  for  C
              libraries in directory dir.

       -custom
              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, ocamlrun(1).  In the custom run-
              time mode, the linker produces an output file that contains both
              the runtime system and the bytecode for the program. The result-
              ing file is larger, but it can be executed directly, even if the
              ocamlrun(1)  command  is  not  installed. Moreover, the ``custom
              runtime'' mode enables linking Caml  code  with  user-defined  C
              functions.

       -i     Cause  the  compiler  to  print  all  defined  names (with their
              inferred types or their definitions) when compiling an implemen-
              tation  (.ml  file).  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 inter-
              face (.mli file) for a file: just redirect the  standard  output
              of the compiler to a .mli file, and edit that file to remove all
              they  were  given  on  the command line, but before the standard
              library directory.

       -o exec-file
              Specify the name of the output file produced by the linker.  The
              default  output  name  is a.out, in keeping with the Unix tradi-
              tion. If the -a option is given, specify the name of the library
              produced.

       -v     Print the version number of the compiler.

       -unsafe
              Turn  bound checking off on array and string accesses (the v.(i)
              and s.[i] constructs). Programs compiled with -unsafe are there-
              fore  slightly  faster,  but  unsafe: anything can happen if the
              program accesses an array or string outside of its bounds.


SEE ALSO

       ocaml(1), ocamlrun(1).
       The Objective Caml user's manual, chapter "Batch compilation".

                                                                     ocamlc(1)