NAME
mpicc, mpiCC / mpic++ - Compile LAM/MPI C/C++ programs.
SYNTAX
mpicc [-showme|-showme:compile|-showme:link] ...
mpiCC [-showme|-showme:compile|-showme:link] ...
mpic++ [-showme|-showme:compile|-showme:link] ...
OPTIONS
-showme
Does not invoke the underlying C/C++ compiler. Instead, it
shows the command line that would be executed to compile the
C/C++ program.
-showme:compile
Does not invoke the underlying C/C++ compiler. Instead, it
shows the compiler flags that would be supplied to the C/C++
compiler.
-showme:link
Does not invoke the underlying C/C++ compiler. Instead, it
shows the linker flags that would be supplied to the C/C++
compiler.
See cc(1) and CC(1) (or whatever your underlying C/C++ compilers are)
for all other options.
DESCRIPTION
mpicc and mpiCC (mpic++ is a synonym for mpiCC provided for filenames
that do not support case-sensitive filenames) are convenience wrappers
for the local native C and C++ compilers. Translation of a LAM program
requires the linkage of the LAM specific libraries which may not reside
in one of the standard search directories of ld(1). It also often
requires the inclusion of header files what may also not be found in a
standard location. mpicc passes its arguments to the local native C
compiler along with the -I, -L and -l options required by LAM programs.
This includes all necessary options for ROMIO and/or C++ bindings
support (if ROMIO/C++ support was included when LAM was compiled).
mpiCC (and therefore mpic++) is similar, but invokes the native C++
compiler instead.
The LAM Team strongly encourages using mpicc and mpiCC instead of
attempting to link to the LAM libraries manually. This allows the
specific implementation of LAM to change without forcing changes to
linker directives in users' Makefiles (the specific set of underlying
LAM libraries has already changed multiple times, and will likely
change again in future versions).
Indeed, since mpicc/mpiCC are very thin wrappers on top of an
underlying compiler, there are very, very few compelling reasons not to
use mpicc/mpiCC. When it is not possible to use mpicc/mpiCC, the
-showme:compile and -showme:link arguments should be used instead. For
example:
shell$ cc -c file1.c `mpicc -showme:compile`
shell$ cc -c file2.c `mpicc -showme:compile`
shell$ cc file1.o file2.o `mpicc -showme:link` -o my_mpi_program
ENVIRONMENT VARIABLES
By default, mpicc uses the C compiler that was selected when LAM was
configured (with the --with-cc flag to ./configure, or by setting the
environment variable CC before ./configure was invoked) as the local
native C compiler, but this can be overridden by the LAMMPICC
environment variable (an older name for this environment variable is
LAMHCC -- this also still works, but its use is deprecated).
Likewise, mpiCC uses the C++ compiler that was selected when LAM was
configured (with the --with-cpp flag to ./configure, or by setting the
environment variable CXX before invoking ./configure) by default, but
this can be overridden by the LAMMPICXX environment variable (an older
name for this environment variable is LAMHCP -- this also still works,
but its use is deprecated).
If the environment variable LAMHOME is set, mpicc and mpiCC will use
its value as the location of the LAM installation directory instead of
the value that was compiled into mpicc/mpiCC. This means that
mpicc/mpiCC will use the value of LAMHOME as the base to create the -I
and -L arguments that are passed to the lower-level compiler, not the
installation directory that was supplied when mpicc/mpiCC were created.
This is almost always a Bad Idea.
The use of LAMHOME is discouraged except for some rare configuration
cases in oddly networked sites (in which case your system administrator
should probably set this up), and for advanced users with multiple
LAM/MPI installations who really know what they are doing; if the
LAMHOME environment variable is unintentionally left set, it can lead
to tremendous user confusion. For example, if LAMHOME points to LAM
installation A, but the user's PATH points to LAM installation B, then
even though B's mpicc will be used, the user program will be compiled
and linked against LAM installation A.
The LAMHOME environment variable is mainly only left in place for
backwards compatibility; it is not required for normal functioning of
LAM/MPI. The LAM Team discourages the use of the LAMHOME environment
variable, and instead advocates simply setting the PATH properly to
switch between multiple LAM/MPI implementations.
NOTES
Previous versions of LAM encouraged the use of hcc and hcp to compile
LAM and/or MPI C and C++ applications, respectively. In very old
versions of LAM, hcc and hcp did not automatically add -lmpi to the
command line. hcc and hcp were eventually deprecated and replaced with
mpicc and mpiCC (or mpic++ on case-insensitive filesystems). The
executables hcc and hcp are now simply symbolic links to mpicc and
mpic++, respectively, just in case there's anyone out there that still
uses those names. It should be harmless to pass in the additional
-lmpi; mpicc and mpic++ should silently do the Right Thing (only link
in the MPI library once).
SEE ALSO
cc(1), CC(1), ld(1), lam-helpfile(5), mpif77(1)