eval就是一個make的解譯器,常與define一起用,由於define只是做展開的動作,
執行時可能會有錯,如下舉一個簡單的例子來說明eval如何parse 巨集。
執行時可能會有錯,如下舉一個簡單的例子來說明eval如何parse 巨集。
Makefile:
define foo #定義foo 巨集 (自訂義函式)
$$( $1) : = ooooo # $1: pointer, $pointer :
pointer_value, $pointer_value = ooooo
$( info $( call
foo , pointer))
#$( eval $( call
foo , pointer))
@echo
-----------------------------
@echo var : $( var ), arg : $( arg )
@echo pointer: $( pointer),
pointed_value: $( pointed_value)
@echo done.
@echo
-----------------------------
$( info $( call foo , pointer)) 結果:
$ make
$( pointer) : = ooooo # pointer: pointer, ointer :
pointer_value, ointer_value = o
-----------------------------
-----------------------------
=>
1. info就是如實的把後面接的(foo 巨集內容)全部都當字串顯示(分隔線之前),並沒有做執行的動作(如assign)。
2. 由於沒有做執行的動作,所以echo變數值時,內容為空。
1. info就是如實的把後面接的(foo 巨集內容)全部都當字串顯示(分隔線之前),並沒有做執行的動作(如assign)。
2. 由於沒有做執行的動作,所以echo變數值時,內容為空。
$( eval $( call foo , pointer)) 結果:
$ make
-----------------------------
-----------------------------
=>
eval將foo的內容當作makefile來做解譯並執行,所以echo時有值。
沒有留言:
張貼留言