zoukankan      html  css  js  c++  java
  • g++编译器的使用(转载)

    关于g++

    g++  是GNU组织开发出的编译器软件集合(GCC)下的一个C++编译器。它是Unix 和 Linux  系统下标配的 基于命令行的 C++编译器。如果你的系统是Windows,可以按照下面的教程安装g++。

    Windows下安装g++

    一、下载minGW(适用于Windwow的GCC工具集合)
    链接:http://pan.baidu.com/s/1eSceGCi                    (g++版本4.8.1,连接失效请回复提醒我下~)

    密码:6fhh  

    二、解压到任何盘符。比如我解压到了E盘下的C++目录下

     
    E:  
      |--C++
           --MinGW  
     
    三、配置环境变量
     
     
     
     

    g++ 的参数使用

     
    --version
    显示g++ 的版本 。
     
    --target-help
    显示特定平台环境的参数支持。比如嵌入式领域使用的avr-g++会对MCU 支持一些优化参数。
     
    -std=<语言标准>
    如:-std=c++11  ,使用C++11标准
     
     
    -ansi
    使用ANSI 标准,禁止GNU 标准特性,如 asm inline typeof 关键字,以及UNIX,vax等预处理宏。
     
     
     
    -funsigned-char           #将程序中的char解析为unsigned char
    -fno-signed-char         #将程序中的char解析为非signed char
    -fsigned-char              #将程序中的char解析为signed char
    -fno-unsigned-char    #将程序中的char解析为非unsigned char

    你的编译器中,char类型是 signed char  还是  unsigned char?不太清楚。嗯,所以如果对范围敏感,应该明确定义unsigned char ,或者是 signed char 。上面4个参数就是指定g++将char解释为什么类型。
     
     
     
    -O0 
    -O1 
    -O2 
    -O3
    取英文单词Optimize(意为:优化)的第一个字母O,不是零哦。
    编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
    优化的是什么呢?生成的程序的大小和程序的执行速度。
     
     
     
    -w
    编译时,不显示任何警告消息。
     
     
     
    -Wall
    编译时,显示所有出现的警告消息。
     
     
     
     
    C/C++源代码的编译过程:
     
     
     
    -o  <file> 
     
    输出编译后的结果到指定的文件file中。windows下默认编译输出a.exe,而linux则默认是a.out。-o不仅可以指定输出的可执行文件,还可以指定中间文件的输出,后面会用。
     
    g++ hello.cpp -o hello.exe          # 输出指定的可执行文件 hello.exe
    g++ -o hello.exe hello.cpp          # 同上
     
    g++ hello.cpp                       #windows下输出的是a.exe,linux下输出的是a.out
     
     
     
     
     -E
    对源文件进行预处理,预处理后生成.i( 或者是 .ii)文件。通过此命令可以查看于处理器是如何“修改”我们的.cpp源文件的,以理解预处理的工作机制。生成的是文本文件。  
     
    g++ -E -o hello.i hello.cpp           #对hello.cpp进行预处理生成hello.i文件
     
     
     
    -S
    只进行预处理和编译,编译是C++编译器的核心操作,其结果就是将C++代码中转译为汇编代码,生成.s汇编文件。生成的依然是文本文件。
     
    g++ -S -o hello.s hello.cpp          #生成汇编文件hello.s
     
     
     
    -c
    只进行 预处理, 编译,汇编操作,生成.o (.obj)文件,不进行链接。生成的是二进制文件。
     
    g++ -c -o hello.o hello.cpp
     
     
     
    -save-temps
    顾名思义,就是保留编译产生的中间文件,使用这个参数,就没必要将前面的参数 -E  -S  -c  一个一个地使用了。
     
     
    » ls -l | grep ^- 
    -rw-r--r-- 1 Luli None 689 Apr  3 14:12 cmd.cpp
     
    » g++ -save-temps -o cmd.exe cmd.cpp                                                                      
    » ls -l | grep ^-
     
    -rw-r--r-- 1 Luli None    689 Apr  3 14:12 cmd.cpp
    -rwxr-xr-x 1 Luli None  93106 Apr  3 14:33 cmd.exe
    -rw-r--r-- 1 Luli None 444403 Apr  3 14:33 cmd.ii
    -rw-r--r-- 1 Luli None   1562 Apr  3 14:33 cmd.o
    -rw-r--r-- 1 Luli None   2501 Apr  3 14:33 cmd.s
     
     
     
     
    -M , -MD
    输出源文件的#include指令 ( #include<head_file> , #include"head_file" ) 引起的所有包含文件依赖。
     
    举个栗子:
    复制代码
    /*cmd.cpp*/
    #include <cmath> int main() { return 0; }
    复制代码
     
    使用-M参数的效果:
     
    -M参数可以查看源文件实质上包含的所有头文件
    » g++ -M cmd.cpp      
                                                                                       
    cmd.o: cmd.cpp e:c++mingwlibgccmingw324.8.1includec++cmath 
     e:c++mingwlibgccmingw324.8.1includec++mingw32itsc++config.h 
     e:c++mingwlibgccmingw324.8.1includec++mingw32itsos_defines.h 
     e:c++mingwlibgccmingw324.8.1includec++mingw32itscpu_defines.h 
     e:c++mingwlibgccmingw324.8.1includec++itscpp_type_traits.h 
     e:c++mingwlibgccmingw324.8.1includec++ext ype_traits.h 
     e:c++mingwincludemath.h e:c++mingwinclude\_mingw.h 
     e:c++mingwincludesdkddkver.h
     
     
     
    然后查看cmath 头文件中的所有#include 指令(蓝色部分是间接#include指令引起的,为了方便验证我写在一起了)
    #include <bits/c++config.h>
         #include <bits/os_defines.h>
         #include <bits/cpu_defines.h>
     
    #include <bits/cpp_type_traits.h>
     
    #include <ext/type_traits.h>
     
    #include <math.h>
         #include <_mingw.h>
               #include <sdkddkver.h>
     
    -MD是将输出的结果保存到一个.d文件中
     
     
    -MM , -MMD
    同上,只不过,他不会考虑 #include<head_file> 指令,而只考虑 #include"head_file" 指令。
     
    作者:lulipro-代码钢琴家 
    出处:http://www.cnblogs.com/lulipro/ 
     
  • 相关阅读:
    python全栈开发day20-类的三大特性继承、多态、封装
    python全栈开发day19-面向对象初识
    python全栈开发day21-2 几个装饰器总结
    python全栈开发day16-正则表达式和re模块
    python全栈开发day15-递归函数、二分查找
    python运算符优先级
    动手动脑4
    动手动脑3
    查询对象个数
    动手动脑2
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/10805711.html
Copyright © 2011-2022 走看看