gcc學習筆記

2021-08-14 05:22:00 字數 1579 閱讀 9330

1)「eval」函式執行時會對它的引數進行兩次展開。第一次展開過程發是由函式本身完成的,第二次是函式展開後的結果被作為makefile內容時由make解析時展開的。此函式的功能主要是:根據其引數的關係、結構,對它們進行替換展開。

當函式的展開結果中存在引用(格式為:$(x))時,那麼在函式的引數中應該使用「$$」來代替「$」

obj=a.o b.o c.o d.o main.o

define ma

main:$(obj)

gcc  -g -o main $$(obj)

endef 

$(eval $(call ma) )

會產生這樣的編譯過程:

cc -c -o a.o a.c

cc -c -o b.o b.c

cc -c -o c.o c.c

g++ -c -o d.o d.cpp

cc -c -o main.o main.c

gcc -g -o main a.o b.o c.o d.o main.o

請注意到$$(obj) ,因為make要把這個作為makefile的一行,要讓這個地方出現$,就要用兩個$,因為兩個$,make才把把作為$字元。

2)$(addprefix fixstring,string1 string2 ...)  

fixstring表示任意要新增的固定字首,在逗號的後面可以是乙個或多個要新增字首的子字串,多個子字串之間用空格隔開

3)$(foreach ,,)

把引數;中的單詞逐一取出放到引數;所指定的變數中,然後再執行< text>;所包含的表示式。每一次;會返回乙個字串,迴圈過程中,;的所返回的每個字串會以空格分隔,最後當整個迴圈結束時,;所返回的每個字串所組成的整個字串(以空格分隔)將會是foreach函式的返回值。

所以,;最好是乙個變數名,;可以是乙個表示式,而;中一般會使用;這個引數來依次列舉;中的單詞。舉個例子:

names := a b c d

files := $(foreach n,$(names),$(n).o)

上面的例子中,$(name)中的單詞會被挨個取出,並存到變數「n」中,「$(n).o」每次根據「$(n)」計算出乙個值,這些值以空格分隔,最後作為foreach函式的返回,所以,$(files)的值是「a.o b.o c.o d.o」。

注意,foreach中的;引數是乙個臨時的區域性變數,foreach函式執行完後,引數;的變數將不在作用,其作用域只在foreach函式當中。

4)$(call variable,param,param,...) 

5) +=, ?=, :=, =區別

6)$$作用

gcc學習筆記

1 連線標頭檔案 gcc i usr openwim include fred.c 使用 i 標誌來包含儲存在子目錄或者非標準位置的中的標頭檔案。例如上邊語句指示編譯器不僅在標準位置,也在 usr openwim include 目錄中查詢程式 fred.c包含的標頭檔案。2 連線庫檔案 a 靜態庫...

gcc 學習筆記

gcc 編譯程式的過程 預處理 pre processing 編譯 compiling 彙編 assembling 鏈結 linking 選項名 作用 o 產生目標 i s o 可執行檔案等 c 通知gcc取消鏈結步驟,即編譯原始碼並在最後生成目標檔案 e 只執行c預編譯器 s 告訴編譯器產生組合語...

gcc學習筆記

預處理 gcc e hello.c o hello.i 輸出預處理後的檔案 編譯 gcc s hello.i o hello.s 輸出彙編結果 彙編 gcc c hello.s o hello.o 輸出二進位制檔案 鏈結 gcc hello.s o hello 輸出鏈結後的二進位制,沒有選項 wal...