Compiling with g++ (original) (raw)
Last Updated : 8 Apr, 2024
**g++ command is a GNU c++ compiler invocation command, which is used for preprocessing, compilation, assembly and linking of source code to generate an executable file. The different "options" of g++ command allow us to stop this process at the intermediate stage.
- **Check g++ compiler version information:
g++ --version

- **Compile a CPP file to generate executable target file: _g++ file_name command is used to compile and create an executable file _a.out (default target name).
**Example: Given a simple program to print "Hello Geek" on standard output with file name _hello.cpp CPP `
// hello.cpp file #include int main() { std::cout << "Hello Geek\n"; return 0; }
`
g++ hello.cpp

This compiles and links _hello.cpp to produce a default target executable file _a.out in present working directory. To run this program, type ****./a.out** where ****./** represents present working directory and **a.out is the executable target file.
./a.out

- **g++ -S file_name is used to only compile the **file_name and **not assembling or linking. It will generate a **file_name.s assembly source file.
**Example:
g++ -S hello.cpp

- **g++ -c file_name is used to only compile and assemble the **file_name and **not link the object code to produce executable file. It will generate a **file_name.o object code file in present working directory.
**Example:
g++ -c hello.cpp

- **g++ -o target_name file_name: Compiles and links **file_name and generates executable target file with **target_name (or a.out by default).
**Example:
g++ -o main.exe hello.cpp

- **Compile and link multiple files: When _-c flag is used, it invokes the compiler stage which translates source code to object code.When -o flag is used it links object code to create the executable file from **file_name.o to **a.out(default), multiples files may be passed together as arguments.
**Example: CPP `
// hello.cpp file #include "helloWorld.h" #include int main() { std::cout << "Hello Geek\n"; helloWorld(); return 0; }
CPP
// helloWorld.cpp file #include void helloWorld() { std::cout << "Hello World\n"; }
CPP
// helloWorld.h file void helloWorld();
`
g++ -c helloWorld.cpp hello.cpp
- It compiles and creates object code for the files helloWorld.cpp and hello.cpp to helloWorld.o and hello.o respectively.
g++ -o main.exe helloWorld.o hello.o
- It links the object codes helloWorld.o and hello.o to create an executable file main.exe
./main.exe
- It runs the executable file main.exe

- **g++ -Wall file_name: It prints all warning messages that are generated during compilation of **file_name.
**Example: CPP `
// hello.cpp file #include int main() { int i; std::cout << "Hello Geek\n"; return 0; }
`
g++ -Wall hello.cpp
- File extension for c++ files can be .cpp or .c++ , .cpp is widely used but .cpp and .c++ are exactly same and all above functionalities are same for .c++ too
