Contents|Index|Previous|Next
Options
controlling the kind of output
The following documentation
discusses types of output and source files. Compilation can involve up
to four of the following stages, always in the following order.
-
preprocessing
-
compiling
-
assembling
-
linking
The first three stages apply
to an individual source file: preprocessing establishes the
type of source code to process, compiling produces an object
file, assembling establishes the syntax that the compiler
expects for symbols, constants, expressions and the general directives;
linking completes the compilation process by combining all
the object files (those newly compiled, and those specified as input) into
an executable file.
For any given input file,
the filename
suffix determines what kind of compilation is done, as the following descriptions
help to clarify.
file.c
C source code which must
be preprocessed.
file.i
C source code which should
not be preprocessed.
file.ii
C++ source code which should
not be preprocessed.
file.m
Objective-C source code.
Note that you must link with the library libobjc.a
to make an Objective-C program work.
file.h
C header file (not to be
compiled or linked).
-
file.cc
-
file.cxx
-
file.cpp
-
file.C
C++ source code which must
be preprocessed. Note that in .cxx,
the last two letters must both be literally x.
Likewise, .C
refers to a literal capital C.
file.s
file.S
Assembler code which must
be preprocessed.
other
An object file to be fed
straight into linking. Any filename with no recognized suffix is treated
this way.
You can specify the input
language explicitly with the -x
option:
-x language
Specify explicitly the language
for the following input files (rather than letting the compiler choose
a default based on the filename suffix). This option applies to all following
input files until the next -x
option.
Possible input for language
include the following optional values.
c objective-c
c++
c-header
cpp-output c++-cpp-output
assembler
assembler-with-cpp
-x none
Turn off any specification
of a language, so that subsequent files are handled according to their
filename suffixes (as they are if -x
has not been used at all).
If you only want some of
the stages of compilation, you can use -x
(or filename suffixes) to tell gcc
where to start, and one of the options -c,
-S,
or -E
to say where gcc
is to stop. Note that some combinations (for example, -x
cpp-output -E
instruct gcc
to do nothing at all.
-c
Compile or assemble the
source files, but do not link. The linking stage simply is not done. The
ultimate output is in the form of an object file for each source file.
By default, the object filename for a source file is made by replacing
the suffix .c,
.i,
.s,
etc., with .o.
Unrecognized input files, not requiring compilation or assembly, are ignored.
-S
Stop after the stage of
compilation proper; do not assemble. The output is in the form of an assembler
code file for each non-assembler input file specified. By default, the
assembler filename for a source file is made by replacing the suffix .c,
.i,
etc., with .s.
Input files that dont require compilation are ignored.
-E
Stop after the preprocessing
stage; do not run the compiler proper. The output is in the form of preprocessed
source code, which is sent to the standard output. Input files which dont
require preprocessing are ignored.
-ofile
Place output in file file.
This applies regardless to whatever sort of output is being produced, whether
it be an executable file, an object file, an assembler file or preprocessed
C code. Since only one output file can be specified, it does not make sense
to use -o
when compiling more than one input file, unless you are producing an executable
file as output. If -o
is not specified, the default is to put an executable file in a.out,
the object file for source.suffix
in source.o,
its assembler file in source.s,
and all preprocessed C source on standard output.
-v
Print (on standard error
output) the commands executed to run the stages of compilation. Also print
the version number of the compiler driver program and of the preprocessor
and the compiler proper.
-pipe
Use pipes rather than temporary
files for communication between the various stages of compilation. This
fails to work on some systems where the assembler is unable to read from
a pipe; but the GNU assembler has no trouble.
Top|Contents|Index|Previous|Next