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++\mingw\lib\gcc\mingw32\4.8.1\include\c++\ cmath \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32\ bits\c++config.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32\ bits\os_defines.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32\ bits\cpu_defines.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\ cpp_type_traits.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\ ext\type_traits.h \
 e:\c++\mingw\include\ math.h e:\c++\mingw\include\ _mingw.h \
 e:\c++\mingw\include\ sdkddkver.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" 指令。
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM