GCC compiles a C/C++ program into executable in 4 steps as shown in the above diagram. For example, a “
gcc -o hello.exe hello.c” is carried out as follows:
- Pre-processing: via the GNU C Preprocessor (
cpp.exe), which includes the headers (
#include) and expands the macros (
> cpp hello.c > hello.i
The resultant intermediate file “
hello.i” contains the expanded source code.
- Compilation: The compiler compiles the pre-processed source code into assembly code for a specific processor.
> gcc -S hello.i
-Soption specifies to produce assembly code, instead of object code. The resultant assembly file is “
- Assembly: The assembler (
as.exe) converts the assembly code into machine code in the object file “
> as -o hello.o hello.s
- Linker: Finally, the linker (
ld.exe) links the object code with the library code to produce an executable file “
> ld -o hello.exe hello.o ...libraries...
Verbose Mode (-v)
You can see the detailed compilation process by enabling
-v (verbose) option. For example,
> gcc -v hello.c -o hello.exe
Defining Macro (-D)
You can use the
-Dname option to define a macro, or
-Dname=value to define a macro with a value. The
value should be enclosed in double quotes if it contains spaces.