1. 程式人生 > 其它 >g++重要編譯引數

g++重要編譯引數

1、-g 編譯帶除錯資訊的可執行檔案
# -g 選項告訴 GCC 產生能被 GNU 偵錯程式GDB使用的除錯資訊,以除錯程式。
# 產生帶除錯資訊的可執行檔案test
g++ -g test.cpp
2、-O[n] 優化原始碼
## 所謂優化,例如省略掉程式碼中從未使用過的變數、直接將常量表達式用結果值代替等等,這些操作
會縮減目標檔案所包含的程式碼量,提高最終生成的可執行檔案的執行效率。
# -O 選項告訴 g++ 對原始碼進行基本優化。這些優化在大多數情況下都會使程式執行的更快。 -O2 
選項告訴 g++ 產生儘可能小和儘可能快的程式碼。 如-O2,-O3,-On(n 常為0–3)
# 
-O 同時減小程式碼的長度和執行時間,其效果等價於-O1 # -O0 表示不做優化 # -O1 為預設優化 # -O2 除了完成-O1的優化之外,還進行一些額外的調整工作,如指令調整等。 # -O3 則包括迴圈展開和其他一些與處理特性相關的優化工作。 # 選項將使編譯的速度比使用 -O 時慢, 但通常產生的程式碼執行速度會更快。 # 使用 -O2優化原始碼,並輸出可執行檔案 g++ -O2 test.cpp
3、 -l 和 -L 指定庫檔案 | 指定庫檔案路徑
# -l引數(小寫)就是用來指定程式要連結的庫,-l引數緊接著就是庫名
# 在/lib和/usr/lib和/usr/local/lib裡的庫直接用-l引數就能連結
# 連結glog庫 g
++ -lglog test.cpp # 如果庫檔案沒放在上面三個目錄裡,需要使用-L引數(大寫)指定庫檔案所在目錄 # -L引數跟著的是庫檔案所在的目錄名 # 連結mytest庫,libmytest.so在/home/bing/mytestlibfolder目錄下 g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
4、 -I 指定標頭檔案搜尋目錄
# -I 
# /usr/include目錄一般是不用指定的,gcc知道去那裡找,但 是如果標頭檔案不在/usr/icnclude
裡我們就要用-I引數指定了,比如標頭檔案放在/myinclude目錄裡,那編譯命令列就要加上-
I
/myinclude 引數了,如果不加你會得到一個”xxxx.h: No such file or directory”的錯 誤。-I引數可以用相對路徑,比如標頭檔案在當前 目錄,可以用-I.來指定。上面我們提到的–cflags參 數就是用來生成-I引數的。 g++ -I/myinclude test.cpp
5、 -Wall 列印警告資訊
# 打印出gcc提供的警告資訊
g++ -Wall test.cpp
6、 -w 關閉警告資訊
# 關閉所有警告資訊
g++ -w test.cpp
7、-std=c++11 設定編譯標準
# 使用 c++11 標準編譯 test.cpp
g++ -std=c++11 test.cpp
8、 -o 指定輸出檔名
# 指定即將產生的檔名
# 指定輸出可執行檔名為test
g++ test.cpp -o test
9. -D 定義巨集
# 在使用gcc/g++編譯的時候定義巨集
# 常用場景:
# -DDEBUG 定義DEBUG巨集,可能檔案中有DEBUG巨集部分的相關資訊,用個DDEBUG來選擇開啟或關閉
DEBUG
// -Dname 定義巨集name,預設定義內容為字串“1”
#include <stdio.h>
int main()
{
    #ifdef DEBUG
   printf("DEBUG LOG\n");
    #endif
   printf("in\n");
}
// 1. 在編譯的時候,使用gcc -DDEBUG main.cpp
// 2. 第七行程式碼可以被執行
注:使用 man gcc 命令可以檢視gcc英文使用手冊,見下圖