Makefile和GCC日常用法

啊浪的部落格發表於2017-11-04

GCC

-I、-L、-l

gcc -o hello hello.c -I /home/hello/include-L /home/hello/lib –lworld

 

(大寫i) -I/home/hello/include:表示將/home/hello/include目錄作為第一個尋找標頭檔案的目錄,尋找順序:/home/hello/include--> /usr/include --> /usr/local/include

 

-L /home/hello/lib:表示將/home/hello/lib目錄作為第一個尋找庫檔案的目錄,尋找順序:/home/hello/lib --> /lib --> /usr/lib --> /usr/local/lib

 

(小寫l)-lworld表示在上面的lib的路徑中尋找libworld.so動態庫檔案(如果gcc編譯選項中加入了“-static”表示尋找libworld.a靜態庫檔案)

 

靜態庫連線

ar rcs libhycu.a *.o

 

動態連結通俗解析

http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html

 

-o0  //不優化程式碼,編譯器不會對程式碼進行重排

 

-fPIC -share //http://blog.sina.com.cn/s/blog_54f82cc201011op1.html

 

gcc -MM first.c  

產生.h的依賴,輸出first.o :first.c *.h

 

gcc -MD main.c

產生main.d檔案,裡面內容為:main.o:main.c

 

mkdep ${CFLAGS} ${SRCS}

產生.depend檔案,裡面內容時:main.o:main.c





Makefile

更多內容請看《Makefile詳解》

 

$@、$^、$<

$@ 代表目標

$^ 代表所有的依賴物件

$< 代表第一個依賴物件


.c.o:

這句話的意思就是 %.o : %.c

也就是說,所有的.o檔案,依賴於對應的.c檔案


常用函式 

src=$(wildcard *.c ./sub/*.c)

dir=$(notdir $(src))

obj=$(patsubst %.c,%.o,$(dir) )

wildcard把 指定目錄 ./ 和 ./sub/ 下的所有字尾是c的檔案全部展開。

notdir把展開的檔案去除掉路徑資訊

patsubst把$(dir)中的變數符合字尾是.c的全部替換成.o




未完待續



相關文章