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目錄加入到該變量中來。

LDFLAGSgcc 等編譯器會用到的一些優化參數,也可以在裏面指定庫文件的位置。用法: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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章