OSDN Git Service

* Makefile.in: Update.
[pf3gnuchains/gcc-fork.git] / gcc / doc / cppopts.texi
1 @c Copyright (c) 1999, 2000, 2001, 2002
2 @c Free Software Foundation, Inc.
3 @c This is part of the CPP and GCC manuals.
4 @c For copying conditions, see the file gcc.texi.
5
6 @c ---------------------------------------------------------------------
7 @c Options affecting the preprocessor
8 @c ---------------------------------------------------------------------
9
10 @c If this file is included with the flag ``cppmanual'' set, it is
11 @c formatted for inclusion in the CPP manual; otherwise the main GCC manual.
12
13 @table @gcctabopt
14 @item -D @var{name}
15 @opindex D
16 Predefine @var{name} as a macro, with definition @code{1}.
17
18 @item -D @var{name}=@var{definition}
19 Predefine @var{name} as a macro, with definition @var{definition}.
20 There are no restrictions on the contents of @var{definition}, but if
21 you are invoking the preprocessor from a shell or shell-like program you
22 may need to use the shell's quoting syntax to protect characters such as
23 spaces that have a meaning in the shell syntax.
24
25 If you wish to define a function-like macro on the command line, write
26 its argument list with surrounding parentheses before the equals sign
27 (if any).  Parentheses are meaningful to most shells, so you will need
28 to quote the option.  With @command{sh} and @command{csh},
29 @option{-D'@var{name}(@var{args@dots{}})=@var{definition}'} works.
30
31 @option{-D} and @option{-U} options are processed in the order they
32 are given on the command line.  All @option{-imacros @var{file}} and
33 @option{-include @var{file}} options are processed after all
34 @option{-D} and @option{-U} options.
35
36 @item -U @var{name}
37 @opindex U
38 Cancel any previous definition of @var{name}, either built in or
39 provided with a @option{-D} option.
40
41 @item -undef
42 @opindex undef
43 Do not predefine any system-specific macros.  The common predefined
44 macros remain defined.
45
46 @item -I @var{dir}
47 @opindex I
48 Add the directory @var{dir} to the list of directories to be searched
49 for header files.
50 @ifset cppmanual
51 @xref{Search Path}.
52 @end ifset
53 Directories named by @option{-I} are searched before the standard
54 system include directories.
55
56 It is dangerous to specify a standard system include directory in an
57 @option{-I} option.  This defeats the special treatment of system
58 headers
59 @ifset cppmanual
60 (@pxref{System Headers})
61 @end ifset
62 .  It can also defeat the repairs to buggy system headers which GCC
63 makes when it is installed.
64
65 @item -o @var{file}
66 @opindex o
67 Write output to @var{file}.  This is the same as specifying @var{file}
68 as the second non-option argument to @command{cpp}.  @command{gcc} has a
69 different interpretation of a second non-option argument, so you must
70 use @option{-o} to specify the output file.
71
72 @item -Wall
73 @opindex Wall
74 Turns on all optional warnings which are desirable for normal code.  At
75 present this is @option{-Wcomment} and @option{-Wtrigraphs}.  Note that
76 many of the preprocessor's warnings are on by default and have no
77 options to control them.
78
79 @item -Wcomment
80 @itemx -Wcomments
81 @opindex Wcomment
82 @opindex Wcomments
83 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
84 comment, or whenever a backslash-newline appears in a @samp{//} comment.
85 (Both forms have the same effect.)
86
87 @item -Wtrigraphs
88 @opindex Wtrigraphs
89 Warn if any trigraphs are encountered.  This option used to take effect
90 only if @option{-trigraphs} was also specified, but now works
91 independently.  Warnings are not given for trigraphs within comments, as
92 they do not affect the meaning of the program.
93
94 @item -Wtraditional
95 @opindex Wtraditional
96 Warn about certain constructs that behave differently in traditional and
97 ISO C@.  Also warn about ISO C constructs that have no traditional C
98 equivalent, and problematic constructs which should be avoided.
99 @ifset cppmanual
100 @xref{Traditional Mode}.
101 @end ifset
102
103 @item -Wimport
104 @opindex Wimport
105 Warn the first time @samp{#import} is used.
106
107 @item -Wundef
108 @opindex Wundef
109 Warn whenever an identifier which is not a macro is encountered in an
110 @samp{#if} directive, outside of @samp{defined}.  Such identifiers are
111 replaced with zero.
112
113 @item -Werror
114 @opindex Werror
115 Make all warnings into hard errors.  Source code which triggers warnings
116 will be rejected.
117
118 @item -Wsystem-headers
119 @opindex Wsystem-headers
120 Issue warnings for code in system headers.  These are normally unhelpful
121 in finding bugs in your own code, therefore suppressed.  If you are
122 responsible for the system library, you may want to see them.
123
124 @item -w
125 @opindex w
126 Suppress all warnings, including those which GNU CPP issues by default.
127
128 @item -pedantic
129 @opindex pedantic
130 Issue all the mandatory diagnostics listed in the C standard.  Some of
131 them are left out by default, since they trigger frequently on harmless
132 code.
133
134 @item -pedantic-errors
135 @opindex pedantic-errors
136 Issue all the mandatory diagnostics, and make all mandatory diagnostics
137 into errors.  This includes mandatory diagnostics that GCC issues
138 without @samp{-pedantic} but treats as warnings.
139
140 @item -M
141 @opindex M
142 @cindex make
143 @cindex dependencies, make
144 Instead of outputting the result of preprocessing, output a rule
145 suitable for @command{make} describing the dependencies of the main
146 source file.  The preprocessor outputs one @command{make} rule containing
147 the object file name for that source file, a colon, and the names of all
148 the included files, including those coming from @option{-include} or
149 @option{-imacros} command line options.
150
151 Unless specified explicitly (with @option{-MT} or @option{-MQ}), the
152 object file name consists of the basename of the source file with any
153 suffix replaced with object file suffix.  If there are many included
154 files then the rule is split into several lines using @samp{\}-newline.
155 The rule has no commands.
156
157 This option does not suppress the preprocessor's debug output, such as
158 @option{-dM}.  To avoid mixing such debug output with the dependency
159 rules you should explicitly specify the dependency output file with
160 @option{-MF}, or use an environment variable like
161 @env{DEPENDENCIES_OUTPUT} (@pxref{DEPENDENCIES_OUTPUT}).  Debug output
162 will still be sent to the regular output stream as normal.
163
164 Passing @option{-M} to the driver implies @option{-E}.
165
166 @item -MM
167 @opindex MM
168 Like @option{-M} but do not mention header files that are found in
169 system header directories, nor header files that are included,
170 directly or indirectly, from such a header.
171
172 This implies that the choice of angle brackets or double quotes in an
173 @samp{#include} directive does not in itself determine whether that
174 header will appear in @option{-MM} dependency output.  This is a
175 slight change in semantics from GCC versions 3.0 and earlier.
176
177 @item -MF @var{file}
178 @opindex MF
179 @anchor{-MF}
180 When used with @option{-M} or @option{-MM}, specifies a
181 file to write the dependencies to.  If no @option{-MF} switch is given
182 the preprocessor sends the rules to the same place it would have sent
183 preprocessed output.
184
185 When used with the driver options @option{-MD} or @option{-MMD},
186 @option{-MF} overrides the default dependency output file.
187
188 @item -MG
189 @opindex MG
190 When used with @option{-M} or @option{-MM}, @option{-MG} says to treat missing
191 header files as generated files and assume they live in the same
192 directory as the source file.  It suppresses preprocessed output, as a
193 missing header file is ordinarily an error.
194
195 This feature is used in automatic updating of makefiles.
196
197 @item -MP
198 @opindex MP
199 This option instructs CPP to add a phony target for each dependency
200 other than the main file, causing each to depend on nothing.  These
201 dummy rules work around errors @command{make} gives if you remove header
202 files without updating the @file{Makefile} to match.
203
204 This is typical output:
205
206 @example
207 test.o: test.c test.h
208
209 test.h:
210 @end example
211
212 @item -MT @var{target}
213 @opindex MT
214
215 Change the target of the rule emitted by dependency generation.  By
216 default CPP takes the name of the main input file, including any path,
217 deletes any file suffix such as @samp{.c}, and appends the platform's
218 usual object suffix.  The result is the target.
219
220 An @option{-MT} option will set the target to be exactly the string you
221 specify.  If you want multiple targets, you can specify them as a single
222 argument to @option{-MT}, or use multiple @option{-MT} options.
223
224 For example, @option{@w{-MT '$(objpfx)foo.o'}} might give
225
226 @example
227 $(objpfx)foo.o: foo.c
228 @end example
229
230 @item -MQ @var{target}
231 @opindex MQ
232
233 Same as @option{-MT}, but it quotes any characters which are special to
234 Make.  @option{@w{-MQ '$(objpfx)foo.o'}} gives
235
236 @example
237 $$(objpfx)foo.o: foo.c
238 @end example
239
240 The default target is automatically quoted, as if it were given with
241 @option{-MQ}.
242
243 @item -MD
244 @opindex MD
245 @option{-MD} is equivalent to @option{-M -MF @var{file}}, except that
246 @option{-E} is not implied.  The driver determines @var{file} based on
247 whether an @option{-o} option is given.  If it is, the driver uses its
248 argument but with a suffix of @file{.d}, otherwise it take the
249 basename of the input file and applies a @file{.d} suffix.
250
251 If @option{-MD} is used in conjunction with @option{-E}, any
252 @option{-o} switch is understood to specify the dependency output file
253 (but @pxref{-MF}), but if used without @option{-E}, each @option{-o}
254 is understood to specify a target object file.
255
256 Since @option{-E} is not implied, @option{-MD} can be used to generate
257 a dependency output file as a side-effect of the compilation process.
258
259 @item -MMD
260 @opindex MMD
261 Like @option{-MD} except mention only user header files, not system
262 -header files.
263
264 @item -x c
265 @itemx -x c++
266 @itemx -x objective-c
267 @itemx -x assembler-with-cpp
268 @opindex x
269 Specify the source language: C, C++, Objective-C, or assembly.  This has
270 nothing to do with standards conformance or extensions; it merely
271 selects which base syntax to expect.  If you give none of these options,
272 cpp will deduce the language from the extension of the source file:
273 @samp{.c}, @samp{.cc}, @samp{.m}, or @samp{.S}.  Some other common
274 extensions for C++ and assembly are also recognized.  If cpp does not
275 recognize the extension, it will treat the file as C; this is the most
276 generic mode.
277
278 @strong{Note:} Previous versions of cpp accepted a @option{-lang} option
279 which selected both the language and the standards conformance level.
280 This option has been removed, because it conflicts with the @option{-l}
281 option.
282
283 @item -std=@var{standard}
284 @itemx -ansi
285 @opindex ansi
286 @opindex std=
287 Specify the standard to which the code should conform.  Currently cpp
288 only knows about the standards for C; other language standards will be
289 added in the future.
290
291 @var{standard}
292 may be one of:
293 @table @code
294 @item iso9899:1990
295 @itemx c89
296 The ISO C standard from 1990.  @samp{c89} is the customary shorthand for
297 this version of the standard.
298
299 The @option{-ansi} option is equivalent to @option{-std=c89}.
300
301 @item iso9899:199409
302 The 1990 C standard, as amended in 1994.
303
304 @item iso9899:1999
305 @itemx c99
306 @itemx iso9899:199x
307 @itemx c9x
308 The revised ISO C standard, published in December 1999.  Before
309 publication, this was known as C9X@.
310
311 @item gnu89
312 The 1990 C standard plus GNU extensions.  This is the default.
313
314 @item gnu99
315 @itemx gnu9x
316 The 1999 C standard plus GNU extensions.
317 @end table
318
319 @item -I-
320 @opindex I-
321 Split the include path.  Any directories specified with @option{-I}
322 options before @option{-I-} are searched only for headers requested with
323 @code{@w{#include "@var{file}"}}; they are not searched for
324 @code{@w{#include <@var{file}>}}.  If additional directories are
325 specified with @option{-I} options after the @option{-I-}, those
326 directories are searched for all @samp{#include} directives.
327
328 In addition, @option{-I-} inhibits the use of the directory of the current
329 file directory as the first search directory for @code{@w{#include
330 "@var{file}"}}.
331 @ifset cppmanual
332 @xref{Search Path}.
333 @end ifset
334
335 @item -nostdinc
336 @opindex nostdinc
337 Do not search the standard system directories for header files.
338 Only the directories you have specified with @option{-I} options
339 (and the directory of the current file, if appropriate) are searched.
340
341 @item -nostdinc++
342 @opindex nostdinc++
343 Do not search for header files in the C++-specific standard directories,
344 but do still search the other standard directories.  (This option is
345 used when building the C++ library.)
346
347 @item -include @var{file}
348 @opindex include
349 Process @var{file} as if @code{#include "file"} appeared as the first
350 line of the primary source file.  However, the first directory searched
351 for @var{file} is the preprocessor's working directory @emph{instead of}
352 the directory containing the main source file.  If not found there, it
353 is searched for in the remainder of the @code{#include "@dots{}"} search
354 chain as normal.
355
356 If multiple @option{-include} options are given, the files are included
357 in the order they appear on the command line.
358
359 @item -imacros @var{file}
360 @opindex imacros
361 Exactly like @option{-include}, except that any output produced by
362 scanning @var{file} is thrown away.  Macros it defines remain defined.
363 This allows you to acquire all the macros from a header without also
364 processing its declarations.
365
366 All files specified by @option{-imacros} are processed before all files
367 specified by @option{-include}.
368
369 @item -idirafter @var{dir}
370 @opindex idirafter
371 Search @var{dir} for header files, but do it @emph{after} all
372 directories specified with @option{-I} and the standard system directories
373 have been exhausted.  @var{dir} is treated as a system include directory.
374
375 @item -iprefix @var{prefix}
376 @opindex iprefix
377 Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix}
378 options.  If the prefix represents a directory, you should include the
379 final @samp{/}.
380
381 @item -iwithprefix @var{dir}
382 @itemx -iwithprefixbefore @var{dir}
383 @opindex iwithprefix
384 @opindex iwithprefixbefore
385 Append @var{dir} to the prefix specified previously with
386 @option{-iprefix}, and add the resulting directory to the include search
387 path.  @option{-iwithprefixbefore} puts it in the same place @option{-I}
388 would; @option{-iwithprefix} puts it where @option{-idirafter} would.
389
390 Use of these options is discouraged.
391
392 @item -isystem @var{dir}
393 @opindex isystem
394 Search @var{dir} for header files, after all directories specified by
395 @option{-I} but before the standard system directories.  Mark it
396 as a system directory, so that it gets the same special treatment as
397 is applied to the standard system directories.
398 @ifset cppmanual
399 @xref{System Headers}.
400 @end ifset
401
402 @item -fpreprocessed
403 @opindex fpreprocessed
404 Indicate to the preprocessor that the input file has already been
405 preprocessed.  This suppresses things like macro expansion, trigraph
406 conversion, escaped newline splicing, and processing of most directives.
407 The preprocessor still recognizes and removes comments, so that you can
408 pass a file preprocessed with @option{-C} to the compiler without
409 problems.  In this mode the integrated preprocessor is little more than
410 a tokenizer for the front ends.
411
412 @option{-fpreprocessed} is implicit if the input file has one of the
413 extensions @samp{.i}, @samp{.ii} or @samp{.mi}.  These are the
414 extensions that GCC uses for preprocessed files created by
415 @option{-save-temps}.
416
417 @item -ftabstop=@var{width}
418 @opindex ftabstop
419 Set the distance between tab stops.  This helps the preprocessor report
420 correct column numbers in warnings or errors, even if tabs appear on the
421 line.  If the value is less than 1 or greater than 100, the option is
422 ignored.  The default is 8.
423
424 @item -fno-show-column
425 @opindex fno-show-column
426 Do not print column numbers in diagnostics.  This may be necessary if
427 diagnostics are being scanned by a program that does not understand the
428 column numbers, such as @command{dejagnu}.
429
430 @item -A @var{predicate}=@var{answer}
431 @opindex A
432 Make an assertion with the predicate @var{predicate} and answer
433 @var{answer}.  This form is preferred to the older form @option{-A
434 @var{predicate}(@var{answer})}, which is still supported, because
435 it does not use shell special characters.
436 @ifset cppmanual
437 @xref{Assertions}.
438 @end ifset
439
440 @item -A -@var{predicate}=@var{answer}
441 Cancel an assertion with the predicate @var{predicate} and answer
442 @var{answer}.
443
444 @item -A-
445 @opindex A-
446 Cancel all predefined assertions and all assertions preceding it on
447 the command line.  Also, undefine all predefined macros and all
448 macros preceding it on the command line.  (This is a historical wart and
449 may change in the future.)
450
451 @item -dCHARS
452 @var{CHARS} is a sequence of one or more of the following characters,
453 and must not be preceded by a space.  Other characters are interpreted
454 by the compiler proper, or reserved for future versions of GCC, and so
455 are silently ignored.  If you specify characters whose behavior
456 conflicts, the result is undefined.
457
458 @table @samp
459 @item M
460 @opindex dM
461 Instead of the normal output, generate a list of @samp{#define}
462 directives for all the macros defined during the execution of the
463 preprocessor, including predefined macros.  This gives you a way of
464 finding out what is predefined in your version of the preprocessor.
465 Assuming you have no file @file{foo.h}, the command
466
467 @example
468 touch foo.h; cpp -dM foo.h
469 @end example
470
471 @noindent
472 will show all the predefined macros.
473
474 @item D
475 @opindex dD
476 Like @samp{M} except in two respects: it does @emph{not} include the
477 predefined macros, and it outputs @emph{both} the @samp{#define}
478 directives and the result of preprocessing.  Both kinds of output go to
479 the standard output file.
480
481 @item N
482 @opindex dN
483 Like @samp{D}, but emit only the macro names, not their expansions.
484
485 @item I
486 @opindex dI
487 Output @samp{#include} directives in addition to the result of
488 preprocessing.
489 @end table
490
491 @item -P
492 @opindex P
493 Inhibit generation of linemarkers in the output from the preprocessor.
494 This might be useful when running the preprocessor on something that is
495 not C code, and will be sent to a program which might be confused by the
496 linemarkers.
497 @ifset cppmanual
498 @xref{Preprocessor Output}.
499 @end ifset
500
501 @item -C
502 @opindex C
503 Do not discard comments.  All comments are passed through to the output
504 file, except for comments in processed directives, which are deleted
505 along with the directive.
506
507 You should be prepared for side effects when using @option{-C}; it
508 causes the preprocessor to treat comments as tokens in their own right.
509 For example, comments appearing at the start of what would be a
510 directive line have the effect of turning that line into an ordinary
511 source line, since the first token on the line is no longer a @samp{#}.
512
513 @item -gcc
514 @opindex gcc
515 Define the macros @sc{__gnuc__}, @sc{__gnuc_minor__} and
516 @sc{__gnuc_patchlevel__}.  These are defined automatically when you use
517 @command{gcc -E}; you can turn them off in that case with
518 @option{-no-gcc}.
519
520 @item -traditional
521 @opindex traditional
522 Try to imitate the behavior of old-fashioned C, as opposed to ISO
523 C@.
524 @ifset cppmanual
525 @xref{Traditional Mode}.
526 @end ifset
527
528 @item -trigraphs
529 @opindex trigraphs
530 Process trigraph sequences.
531 @ifset cppmanual
532 @xref{Initial processing}.
533 @end ifset
534 @ifclear cppmanual
535 These are three-character sequences, all starting with @samp{??}, that
536 are defined by ISO C to stand for single characters.  For example,
537 @samp{??/} stands for @samp{\}, so @samp{'??/n'} is a character
538 constant for a newline.  By default, GCC ignores trigraphs, but in
539 standard-conforming modes it converts them.  See the @option{-std} and
540 @option{-ansi} options.
541
542 The nine trigraphs and their replacements are
543
544 @example
545 Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
546 Replacement:      [    ]    @{    @}    #    \    ^    |    ~
547 @end example
548 @end ifclear
549
550 @item -remap
551 @opindex remap
552 Enable special code to work around file systems which only permit very
553 short file names, such as MS-DOS@.
554
555 @item -$
556 @opindex $
557 Forbid the use of @samp{$} in identifiers.  The C standard allows
558 implementations to define extra characters that can appear in
559 identifiers.  By default GNU CPP permits @samp{$}, a common extension.
560
561 @item -h
562 @itemx --help
563 @itemx --target-help
564 @opindex h
565 @opindex help
566 @opindex target-help
567 Print text describing all the command line options instead of
568 preprocessing anything.
569
570 @item -v
571 @opindex v
572 Verbose mode.  Print out GNU CPP's version number at the beginning of
573 execution, and report the final form of the include path.
574
575 @item -H
576 @opindex H
577 Print the name of each header file used, in addition to other normal
578 activities.  Each name is indented to show how deep in the
579 @samp{#include} stack it is.
580
581 @item -version
582 @itemx --version
583 @opindex version
584 Print out GNU CPP's version number.  With one dash, proceed to
585 preprocess as normal.  With two dashes, exit immediately.
586 @end table