makefile中「 」與「 」的區別

2021-07-08 16:15:13 字數 1236 閱讀 9533

先看下面的makefile:

#example

b := $(a)

a = later

all:

@echo $(b)

執行make命令,我們發現什麼都沒輸出,我們將第3行的:=換成=。

#example

b = $(a)

a = later

all:

@echo $(b)

執行make,輸出later。

分析:b :=$(a)時,它只會到這句語句之前去找a的值,因a沒有定義所以什麼都沒有輸出。

b = $(a)時,雖然該語句之前a沒有定義,但是在其後定義了,所以能輸出later。

#example

a = before1

a = before2

b := $(a)

a = later1

all:

@echo $(b)

執行make,輸出before2。

解釋:「:=」向前尋找離它最近的一條定義

上面makefile最後一句echo前面的@符號的作用是禁止回顯。如我們的makefile改為如下:

#example

a = before1

b = $(a)

b = before2

c = $(b)

a = later1

b = later2

all:

echo $(c)

執行make:

echo later2

later2

分析:c = $(b),應該從makefile檔案最後往前找b,得到b = later2,將最後一句全部變數代替即為:

echo later2,因echo前沒有@符號,回顯該語句,然後再輸出later2。

注意:當我們直接在終端上要用echo輸出某個變數的值時,是不能加()的。如我們要輸出paht

應該用echo $path,而不能用echo $(path),否則會報錯,注意'$'不能少了。

makefile中"?=",含義為:如沒定義,則賦值。

如:temp ?= var 等價於

ifeq($(temp),undefined)

temp = var

endif

Makefile中 與 的區別

先看下面的makefile example b a a later all echo b 執行make命令,我們發現什麼都沒輸出,我們將第2行的 換成 example b a a later all echo b 執行make,輸出later。分析 b a 時,它只會到這句語句之前去找a的值,因a沒...

Makefile中萬用字元 與 的區別

本文的測試環境是windows7下使用mingw提供的make.exe 例如,如果你想編譯乙個資料夾下的所有.c檔案,你可能會這樣寫 1 o c 2 gcc o 但是如果整個檔案只有這兩行的話,就會出現這樣的錯誤 make target not found.stop.要知道原因,我們先來看看另乙個m...

makefile 與 的區別

1 賦值,這種形式是以遞迴的形式展開變數,及被賦值的變數只有在被引用 使用 時,才會展開,及延遲展開 不常用 2 賦值,這種形式是直接展開式賦值。foo bar bar ugh ugh huh?all echo foo 例子 於gnumake 上述例子執行結果為 其中all echo foo 等價於...