天天看點

Makefile中的-Wall -O2 -Os -g等選項介紹

-Wall:選項可以列印出編譯時所有的錯誤或者警告資訊。這個選項很容易被遺忘,編譯的時候,沒有錯誤或者警告提示,以為自己的程式很完美,其實,裡面有可能隐藏着許多陷阱。變量沒有初始化,類型不比對,或者類型轉換錯誤等警告提示需要重點注意,錯誤就隐藏在這些代碼裡面。沒有使用的變量也需要注意,去掉無用的代碼,讓整個程式顯得幹淨一點。下次寫Makefile的時候,一定加-Wall編譯選項。

-O0: 表示編譯時沒有優化。

-O1: 表示編譯時使用預設優化。

-O2: 表示編譯時使用二級優化。

-O3: 表示編譯時使用最進階優化。

-Os:相當于-O2.5優化,但又不所見代碼尺寸,具體見連結:點選打開連結 點選打開連結

CFLAGS 表示用于 C 編譯器的選項,

CXXFLAGS 表示用于 C++ 編譯器的選項。

這兩個變量實際上涵蓋了編譯和彙編兩個步驟。

CFLAGS: 指定頭檔案(.h檔案)的路徑,如:CFLAGS=-I/usr/include -I/path/include。同樣地,安裝一個包時會在安裝路徑下建立一個include目錄,當安裝過程中出現問題時,試着把以前安裝的包的include目錄加入到該變量中來。

LDFLAGS:gcc 等編譯器會用到的一些優化參數,也可以在裡面指定庫檔案的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安裝一個包都幾乎一定的會在安裝目錄裡建立一個lib目錄。如果明明安裝了某個包,而安裝另一個包時,它愣是說找不到,可以抒那個包的lib路徑加入的LDFALGS中試一下。

LIBS:告訴連結器要連結哪些庫檔案,如LIBS = -lpthread -liconv

簡單地說,LDFLAGS是告訴連結器從哪裡尋找庫檔案,而LIBS是告訴連結器要連結哪些庫檔案。不過使用時連結階段這兩個參數都會加上,是以你即使将這兩個的值互換,也沒有問題。

有時候LDFLAGS指定-L雖然能讓連結器找到庫進行連結,但是運作時連結器卻找不到這個庫,如果要讓軟體運作時庫檔案的路徑也得到擴充,那麼我們需要增加這兩個庫給"-Wl,R":

參見http://blog.csdn.net/xinyuan510214/article/details/50825499

繼續閱讀