參考到下面博客,把編譯步驟分解的很細
linux編譯c語言?linuxC編譯參數CPPFLAGS、CFLAGS、LDFLAGS參數的理解 - yongfengnice - 博客園
CPPFLAGS : 預處理器需要的選項 如:-I (大寫i指定頭文件路徑)
CFLAGS:編譯的時候使用的參數 –Wall –g -c
LDFLAGS :鏈接庫使用的選項 –L -l (大寫L指定動態庫的路徑,小寫L指定動態庫的名稱)
vimgrep。
CFLAGS 表示用于C編譯器的選項
CXXFLAGS 表示用于C++編譯器的選項
這兩個變量實際上涵蓋了編譯和匯編的兩個步驟
linux gcc編譯c文件、CFLAGS:指定頭文件(.h)的路徑,如:CFLAGS=-I/usr/include -I/path/include 。
相同地,安裝一個包時會在安裝路徑下建立一個include文件夾,當安裝過程中出現故障時,試著把曾經安裝的包的include文件夾增加到該變量中來。
LDFLAGS:gcc 等編譯器會用到的一些優化參數,也能夠在里面指定庫文件的位置。
linux 編譯。使用方法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安裝一個包都差點兒一定的會在安裝文件夾里建立一個lib文件夾。假設明明安裝了某個包,而安裝還有一個包時,它愣是說找不到,能夠抒那個包的lib路徑增加的LDFALGS中試一下。
LIBS:告訴鏈接器要鏈接哪些庫文件。如LIBS = -lpthread -liconv
簡單地說,LDFLAGS是告訴鏈接器從哪里尋找庫文件,而LIBS是告訴鏈接器要鏈接哪些庫文件。
有時候LDFLAGS指定-L盡管能讓鏈接器找到庫進行鏈接。可是運行時鏈接器卻找不到這個庫。假設要讓軟件運行時庫文件的路徑也得到擴展,那么我們須要增加這兩個庫給”-Wl,R”:
假設在運行./configure曾經環境變量設置export LDFLAGS=”-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib” ,注意環境變量設置等號兩邊不能夠有空格,并且要加上引號(shell的使用方法)。那么運行configure以后。Makefile將會設置這個選項。鏈接時會有這個參數,編譯出來的可運行程序的庫文件搜索路徑就得到擴展了。
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
二、常用
還有一個常用方式? gcc-D的作用
加上-D選項就是在編譯時增加對-D后面的宏的定義,類似下面:
CFLAGS=CFLAGCFLAGS+=-g -Wall -DDEBUG
1.假如定義一個宏CONFIG_DEBUG在.c里面定義為:#define CONFIG_DEBUG在makefile里定義為: CONFIG_DEBUG=y假如說我們想在makefile里為.c文件進入一個宏定義,就用EXTRA_CFLAGS += DCONFIG_DEBUG( 等價于在.c文件里定義#define CONFIG_DEBUG)這時CONFIG_DEBUG=y與EXTRA_CFLAGS += DCONFIG_DEBUG的區別應該你已經看出來的,前者是對makefile編譯時用的,比如說obj-(CONFIG_DEBUG) += test.o,而后者則是對.c源文件里的 用的,比如說:#if defined(CONFIG_DEBUG) ...#else...#endif2.假如定義一個宏CONFIG_DEBUG = 3在.c里面定義為:#define CONFIG_DEBUG 3假如說我們想在makefile里為.c文件進入一個宏定義,就用EXTRA_CFLAGS += -DCONFIG_DEBUG=3此時兩者的定義完全相同。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态