gcc和g++的用法

gcc基本用法:ios

  gcc main.c -o hello
c++

g++基本用法:spa

一、g++编译流程:code

  预处理-->编译-->汇编-->连接blog

# main.cpp
#include <iostream> using namespace std; int main(void) { cout<<"Hello World!"<<endl; return 0; }

预处理:ci

  g++ -E 仅做预处理,不进行编译、汇编和连接terminal

  好比查看某一个文件的预处理过程,命令以下:io

    $g++ -E main.cpp编译

  上面命令直接在terminal中显示预处理过程,若是main.cpp中包含include,例如#include<iostream>,只能看到部分预处理结果;这个只显示预处理,不生成文件;若是你想查看详细的预处理,能够重定向到一个文件中,命令以下:class

    $g++ -E main.cpp -o main.i

编译:

  g++ -s 编译到汇编语言,不进行汇编和连接,即只激活预处理和编译,生成汇编语言

  $g++ -s main.i -o main.s

汇编:

  g++ -c 编译、汇编到目标代码,不进行连接,即生成目标文件(.o

  $g++ -c main.s -o main.o

连接:

  g++ -o 

  g++ main.o -o main

  (注意,若是各个文件有依赖关系,在生成连接文件以前步骤每一个文件单独操做都没有问题,可是在连接的时候会考虑依赖关系,因此须要在main.o后面添加依赖文件)

执行:

  ./main 执行

  最后一步,执行-o后面的文件,若是没有-o,系统会默认生成一个a.out文件(执行./a.out

一步执行:

  g++ main.cpp -o main

 

2g++关键参数介绍

上文在g++编译过程当中已经介绍过-E-S-c-o,再简单介绍-x-M

  -x <语言> 指定其后输入文件的语言

  容许的语言包括:c c++ assembler none

 

  ‘none’意味着恢复默认行为,即根据文件的扩展名猜想源文件的语言

  实例以下:

    $g++ -x c main.cpp  # 编译出错,提示:main.cpp:1:19: fatal error: iostream: 没有那个文件或目录

    $g++ -x c++ main.cpp  # 编译成功    

 

 

  g++ -M main.cpp 生成文件关联信息。包含目标文件所依赖的全部源代码