GCC, the GNU Compiler Collection, is a compiler system, part of the GNU toolchain, produced by the GNU Project.
It provides frontends for C, C++, Java, Ada, Go, etc.
GCC (Wikipedia)
GCC Manual
Install GCC
In Debian:
$ sudo aptitude install gcc
Query GCC Version
$ gcc --version
gcc (Debian 5.3.1-8) 5.3.1 20160205
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Help
Get basic help:
$ gcc --help
Usage: gcc [options] file...
Options:
-pass-exit-codes Exit with highest error code from a phase
--help Display this information
--target-help Display target specific command line options
--help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]
Display specific types of command line options
(Use '-v --help' to display command line options of sub-processes)
--version Display compiler version information
-dumpspecs Display all of the built in spec strings
-dumpversion Display the version of the compiler
-dumpmachine Display the compiler's target processor
-print-search-dirs Display the directories in the compiler's search path
-print-libgcc-file-name Display the name of the compiler's companion library
-print-file-name=Display the full path to library
-print-prog-name=Display the full path to compiler component
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path
-print-multi-directory Display the root directory for versions of libgcc
-print-multi-lib Display the mapping between command line options and
multiple library search directories
-print-multi-os-directory Display the relative path to OS libraries
-print-sysroot Display the target libraries directory
-print-sysroot-headers-suffix Display the sysroot suffix used to find headers
-Wa,Pass comma-separated on to the assembler
-Wp,Pass comma-separated on to the preprocessor
-Wl,Pass comma-separated on to the linker
-XassemblerPass on to the assembler
-XpreprocessorPass on to the preprocessor
-XlinkerPass on to the linker
-save-temps Do not delete intermediate files
-save-temps=Do not delete intermediate files
-no-canonical-prefixes Do not canonicalize paths when building relative
prefixes to other gcc components
-pipe Use pipes rather than intermediate files
-time Time the execution of each subprocess
-specs=Override built-in specs with the contents of
-std=Assume that the input sources are for
--sysroot=Use as the root directory for headers
and libraries
-BAdd to the compiler's search paths
-v Display the programs invoked by the compiler
-### Like -v but options quoted and commands not executed
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
-oPlace the output into
-pie Create a position independent executable
-shared Create a shared library
-xSpecify the language of the following input files
Permissible languages include: c c++ assembler none
'none' means revert to the default behavior of
guessing the language based on the file's extension
Options starting with -g, -f, -m, -O, -W, or --param are automatically
passed on to the various sub-processes invoked by gcc. In order to pass
other options on to these processes the -Woptions must be used.
Display enabled options
$ gcc -Q -v file
Display enabled options in compiler and subprocesses.
If we set no options it shows default ones.
Debug symbols
$ gcc -g
Add debugging info in the operating system native format. This info is useful for gdb.
It is allowed to use -g option together with optimization ones.
Optimization
Without compilation options (or -O0) compiler tries to minimize compilation time.
Optimize to reduce code size
$ gcc -Os
Optimize for speed
$ gcc -O1
$ gcc -O2
$ gcc -O3
The higher the number the more optimizations enabled.
-O0 means no optimization enabled.
Preprocess only
$ gcc -E file
Only preprocess the code. Stop after preprocessing the code.
Show the assembler code
$ gcc -S file
Stop after preprocessing and compilation (do not assemble the code).
REFERENCE
$ man gcc