📄 gcc.c
字号:
that we default the front end language better. */static const char *trad_capable_cpp ="cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}";/* We don't wrap .d files in %W{} since a missing .d file, and therefore no dependency entry, confuses make into thinking a .o file that happens to exist is up-to-date. */static const char *cpp_unique_options ="%{C|CC:%{!E:%eGCC does not support -C or -CC without -E}}\ %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I\ %{MD:-MD %{!o:%b.d}%{o*:%.d%*}}\ %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}}\ %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*}\ %{!E:%{!M:%{!MM:%{MD|MMD:%{o*:-MQ %*}}}}}\ %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i\ %{fmudflap:-D_MUDFLAP -include mf-runtime.h}\ %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}\ %{E|M|MM:%W{o*}}";/* This contains cpp options which are common with cc1_options and are passed only when preprocessing only to avoid duplication. We pass the cc1 spec options to the preprocessor so that it the cc1 spec may manipulate options used to set target flags. Those special target flags settings may in turn cause preprocessor symbols to be defined specially. */static const char *cpp_options ="%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\ %{f*} %{g*:%{!g0:%{!fno-working-directory:-fworking-directory}}} %{O*}\ %{undef} %{save-temps:-fpch-preprocess}";/* This contains cpp options which are not passed when the preprocessor output will be used by another program. */static const char *cpp_debug_options = "%{d*}";/* NB: This is shared amongst all front-ends. */static const char *cc1_options ="%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*}\ %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}}\ %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\ %{v:-version} %{pg:-p} %{p} %{f*} %{undef}\ %{Qn:-fno-ident} %{--help:--help}\ %{--target-help:--target-help}\ %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\ %{fsyntax-only:-o %j} %{-param*}\ %{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants}\ %{coverage:-fprofile-arcs -ftest-coverage}";static const char *asm_options ="%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";static const char *invoke_as =#ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT"%{!S:-o %|.s |\n as %(asm_options) %|.s %A }";#else"%{!S:-o %|.s |\n as %(asm_options) %m.s %A }";#endif/* Some compilers have limits on line lengths, and the multilib_select and/or multilib_matches strings can be very long, so we build them at run time. */static struct obstack multilib_obstack;static const char *multilib_select;static const char *multilib_matches;static const char *multilib_defaults;static const char *multilib_exclusions;/* Check whether a particular argument is a default argument. */#ifndef MULTILIB_DEFAULTS#define MULTILIB_DEFAULTS { "" }#endifstatic const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;#ifndef DRIVER_SELF_SPECS#define DRIVER_SELF_SPECS ""#endifstatic const char *const driver_self_specs[] = { DRIVER_SELF_SPECS };#ifndef OPTION_DEFAULT_SPECS#define OPTION_DEFAULT_SPECS { "", "" }#endifstruct default_spec{ const char *name; const char *spec;};static const struct default_spec option_default_specs[] = { OPTION_DEFAULT_SPECS };struct user_specs{ struct user_specs *next; const char *filename;};static struct user_specs *user_specs_head, *user_specs_tail;#ifndef SWITCH_TAKES_ARG#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR)#endif#ifndef WORD_SWITCH_TAKES_ARG#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)#endif#ifdef HAVE_TARGET_EXECUTABLE_SUFFIX/* This defines which switches stop a full compilation. */#define DEFAULT_SWITCH_CURTAILS_COMPILATION(CHAR) \ ((CHAR) == 'c' || (CHAR) == 'S')#ifndef SWITCH_CURTAILS_COMPILATION#define SWITCH_CURTAILS_COMPILATION(CHAR) \ DEFAULT_SWITCH_CURTAILS_COMPILATION(CHAR)#endif#endif/* Record the mapping from file suffixes for compilation specs. */struct compiler{ const char *suffix; /* Use this compiler for input files whose names end in this suffix. */ const char *spec; /* To use this compiler, run this spec. */ const char *cpp_spec; /* If non-NULL, substitute this spec for `%C', rather than the usual cpp_spec. */ const int combinable; /* If nonzero, compiler can deal with multiple source files at once (IMA). */ const int needs_preprocessing; /* If nonzero, source files need to be run through a preprocessor. */};/* Pointer to a vector of `struct compiler' that gives the spec for compiling a file, based on its suffix. A file that does not end in any of these suffixes will be passed unchanged to the loader and nothing else will be done to it. An entry containing two 0s is used to terminate the vector. If multiple entries match a file, the last matching one is used. */static struct compiler *compilers;/* Number of entries in `compilers', not counting the null terminator. */static int n_compilers;/* The default list of file name suffixes and their compilation specs. */static const struct compiler default_compilers[] ={ /* Add lists of suffixes of known languages here. If those languages were not present when we built the driver, we will hit these copies and be given a more meaningful error than "file not used since linking is not done". */ {".m", "#Objective-C", 0, 0, 0}, {".mi", "#Objective-C", 0, 0, 0}, {".mm", "#Objective-C++", 0, 0, 0}, {".M", "#Objective-C++", 0, 0, 0}, {".mii", "#Objective-C++", 0, 0, 0}, {".cc", "#C++", 0, 0, 0}, {".cxx", "#C++", 0, 0, 0}, {".cpp", "#C++", 0, 0, 0}, {".cp", "#C++", 0, 0, 0}, {".c++", "#C++", 0, 0, 0}, {".C", "#C++", 0, 0, 0}, {".CPP", "#C++", 0, 0, 0}, {".ii", "#C++", 0, 0, 0}, {".ads", "#Ada", 0, 0, 0}, {".adb", "#Ada", 0, 0, 0}, {".f", "#Fortran", 0, 0, 0}, {".for", "#Fortran", 0, 0, 0}, {".fpp", "#Fortran", 0, 0, 0}, {".F", "#Fortran", 0, 0, 0}, {".FOR", "#Fortran", 0, 0, 0}, {".FPP", "#Fortran", 0, 0, 0}, {".f90", "#Fortran", 0, 0, 0}, {".f95", "#Fortran", 0, 0, 0}, {".F90", "#Fortran", 0, 0, 0}, {".F95", "#Fortran", 0, 0, 0}, {".r", "#Ratfor", 0, 0, 0}, {".p", "#Pascal", 0, 0, 0}, {".pas", "#Pascal", 0, 0, 0}, {".java", "#Java", 0, 0, 0}, {".class", "#Java", 0, 0, 0}, {".zip", "#Java", 0, 0, 0}, {".jar", "#Java", 0, 0, 0}, /* Next come the entries for C. */ {".c", "@c", 0, 1, 1}, {"@c", /* cc1 has an integrated ISO C preprocessor. We should invoke the external preprocessor if -save-temps is given. */ "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\ %{!E:%{!M:%{!MM:\ %{traditional|ftraditional:\%eGNU C no longer supports -traditional without -E}\ %{!combine:\ %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ %(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i} \n\ cc1 -fpreprocessed %{save-temps:%b.i} %{!save-temps:%g.i} \ %(cc1_options)}\ %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\ cc1 %(cpp_unique_options) %(cc1_options)}}}\ %{!fsyntax-only:%(invoke_as)}} \ %{combine:\ %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ %(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i}}\ %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\ cc1 %(cpp_unique_options) %(cc1_options)}}\ %{!fsyntax-only:%(invoke_as)}}}}}}", 0, 1, 1}, {"-", "%{!E:%e-E or -x required when input is from standard input}\ %(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)", 0, 0, 0}, {".h", "@c-header", 0, 0, 0}, {"@c-header", /* cc1 has an integrated ISO C preprocessor. We should invoke the external preprocessor if -save-temps is given. */ "%{E|M|MM:%(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)}\ %{!E:%{!M:%{!MM:\ %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ %(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i} \n\ cc1 -fpreprocessed %{save-temps:%b.i} %{!save-temps:%g.i} \ %(cc1_options)\ -o %g.s %{!o*:--output-pch=%i.gch}\ %W{o*:--output-pch=%*}%V}\ %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\ cc1 %(cpp_unique_options) %(cc1_options)\ -o %g.s %{!o*:--output-pch=%i.gch}\ %W{o*:--output-pch=%*}%V}}}}}}", 0, 0, 0}, {".i", "@cpp-output", 0, 1, 0}, {"@cpp-output", "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0}, {".s", "@assembler", 0, 1, 0}, {"@assembler", "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 1, 0}, {".S", "@assembler-with-cpp", 0, 1, 0}, {"@assembler-with-cpp",#ifdef AS_NEEDS_DASH_FOR_PIPED_INPUT "%(trad_capable_cpp) -lang-asm %(cpp_options)\ %{E|M|MM:%(cpp_debug_options)}\ %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\ as %(asm_debug) %(asm_options) %|.s %A }}}}"#else "%(trad_capable_cpp) -lang-asm %(cpp_options)\ %{E|M|MM:%(cpp_debug_options)}\ %{!M:%{!MM:%{!E:%{!S:-o %|.s |\n\ as %(asm_debug) %(asm_options) %m.s %A }}}}"#endif , 0, 1, 0},#include "specs.h" /* Mark end of table. */ {0, 0, 0, 0, 0}};/* Number of elements in default_compilers, not counting the terminator. */static const int n_default_compilers = ARRAY_SIZE (default_compilers) - 1;/* A vector of options to give to the linker. These options are accumulated by %x, and substituted into the linker command with %X. */static int n_linker_options;static char **linker_options;/* A vector of options to give to the assembler. These options are accumulated by -Wa, and substituted into the assembler command with %Y. */static int n_assembler_options;static char **assembler_options;/* A vector of options to give to the preprocessor. These options are accumulated by -Wp, and substituted into the preprocessor command with %Z. */static int n_preprocessor_options;static char **preprocessor_options;/* Define how to map long options into short ones. *//* This structure describes one mapping. */struct option_map{ /* The long option's name. */ const char *const name; /* The equivalent short option. */ const char *const equivalent; /* Argument info. A string of flag chars; NULL equals no options. a => argument required. o => argument optional. j => join argument to equivalent, making one word. * => require other text after NAME as an argument. */ const char *const arg_info;};/* This is the table of mappings. Mappings are tried sequentially for each option encountered; the first one that matches, wins. */static const struct option_map option_map[] = { {"--all-warnings", "-Wall", 0}, {"--ansi", "-ansi", 0}, {"--assemble", "-S", 0}, {"--assert", "-A", "a"}, {"--classpath", "-fclasspath=", "aj"}, {"--bootclasspath", "-fbootclasspath=", "aj"}, {"--CLASSPATH", "-fclasspath=", "aj"}, {"--combine", "-combine", 0}, {"--comments", "-C", 0}, {"--comments-in-macros", "-CC", 0}, {"--compile", "-c", 0}, {"--debug", "-g", "oj"}, {"--define-macro", "-D", "aj"}, {"--dependencies", "-M", 0}, {"--dump", "-d", "a"}, {"--dumpbase", "-dumpbase", "a"}, {"--encoding", "-fencoding=", "aj"}, {"--entry", "-e", 0}, {"--extra-warnings", "-W", 0}, {"--extdirs", "-fextdirs=", "aj"}, {"--for-assembler", "-Wa", "a"}, {"--for-linker", "-Xlinker", "a"}, {"--force-link", "-u", "a"}, {"--coverage", "-coverage", 0}, {"--imacros", "-imacros", "a"}, {"--include", "-include", "a"}, {"--include-barrier", "-I-", 0}, {"--include-directory", "-I", "aj"}, {"--include-directory-after", "-idirafter", "a"}, {"--include-prefix", "-iprefix", "a"}, {"--include-with-prefix", "-iwithprefix", "a"}, {"--include-with-prefix-before", "-iwithprefixbefore", "a"}, {"--include-with-prefix-after", "-iwithprefix", "a"}, {"--language", "-x", "a"}, {"--library-directory", "-L", "a"}, {"--machine", "-m", "aj"}, {"--machine-", "-m", "*j"}, {"--no-integrated-cpp", "-no-integrated-cpp", 0}, {"--no-line-commands", "-P", 0}, {"--no-precompiled-includes", "-noprecomp", 0}, {"--no-standard-includes", "-nostdinc", 0}, {"--no-standard-libraries", "-nostdlib", 0}, {"--no-warnings", "-w", 0}, {"--optimize", "-O", "oj"}, {"--output", "-o", "a"}, {"--output-class-directory", "-foutput-class-dir=", "ja"}, {"--param", "--param", "a"}, {"--pass-exit-codes", "-pass-exit-codes", 0}, {"--pedantic", "-pedantic", 0}, {"--pedantic-errors", "-pedantic-errors", 0}, {"--pie", "-pie", 0}, {"--pipe", "-pipe", 0}, {"--prefix", "-B", "a"}, {"--preprocess", "-E", 0}, {"--print-search-dirs", "-print-search-dirs", 0}, {"--print-file-name", "-print-file-name=", "aj"}, {"--print-libgcc-file-name", "-print-libgcc-file-name", 0}, {"--print-missing-file-dependencies", "-MG", 0}, {"--print-multi-lib", "-print-multi-lib", 0}, {"--print-multi-directory", "-print-multi-directory", 0}, {"--print-multi-os-directory", "-print-multi-os-directory", 0}, {"--print-prog-name", "-print-prog-name=", "aj"}, {"--profile", "-p", 0}, {"--profile-blocks", "-a", 0}, {"--quiet", "-q", 0}, {"--resource", "-fcompile-resource=", "aj"}, {"--save-temps", "-save-temps", 0}, {"--shared", "-shared", 0}, {"--silent", "-q", 0}, {"--specs", "-specs=", "aj"}, {"--static", "-static", 0}, {"--std", "-std=", "aj"}, {"--symbolic", "-symbolic", 0}, {"--sysroot", "--sysroot=", "aj"}, {"--time", "-time", 0}, {"--trace-includes", "-H", 0}, {"--traditional", "-traditional", 0}, {"--traditional-cpp", "-traditional-cpp", 0}, {"--trigraphs", "-trigraphs", 0}, {"--undefine-macro", "-U", "aj"}, {"--user-dependencies", "-MM", 0}, {"--verbose", "-v", 0}, {"--warn-", "-W", "*j"}, {"--write-dependencies", "-MD", 0}, {"--write-user-dependencies", "-MMD", 0}, {"--", "-f", "*j"} };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -