Makefile選項CFLAGS,LDFLAGS,LIBS

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":

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

如果在執行./configure以前設置環境變量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib" ,注意設置環境變量等號兩邊不可以有空格,而且要加上引號(shell的用法)。那麼執行configure以後,Makefile將會設置這個選項,鏈接時會有這個參數,編譯出來的可執行程序的庫文件搜索路徑就得到擴展了

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