使用make的''Remaking Makefiles''功能我使用include
指令(請參閱Makefile: defining rules and prerequisites in recipes)生成部分makefile。現在我一直無法看到如何表達包含的makefile之間的依賴關係。他們似乎都是一次全部評估。Makefile:聲明包含文件之間的依賴關係
考慮以下簡單的Makefile,說明我的問題:
all:
-include foo.make
-include bar.make
foo.make: Makefile
echo FOO:=blub bla baz > foo.make
bar.make: Makefile foo.make
echo BAR:=$(FOO) > bar.make
如果我現在運行make
我會得到:
$ cat foo.make
FOO:=blub bla baz
$ cat bar.make
BAR:=
爲什麼?由於bar.make
取決於foo.make
,因此bar.make
的評估不應等到它成功包含foo.make
?
如何解決此問題並確保bar.make
要麼稍後重新評估,要麼僅評估一次foo.make
存在,已包含並可定義變量BAR
?
我不能結合foo.make
和bar.make
成一個單一的生成文件和規則的原因有兩方面:
首先,我真正的設置,bar.make
取決於這又傳遞地依賴於foo.make
多箇中間目標。因此,在創建foo.make
時,bar.make
的內容仍不能創建。
其次,在我的真實設置中,foo.make
和bar.make
不只是定義變量,而且還包括eval()
define/endef
塊。所以我必須寫:
-include makefile_with_prerequisite_variables
define MYDEF
sometarget-$1: $(TARGET_$1_PREREQUISITES)
[...]
endf
-include makefile_with_eval_call_statements
的makefile_with_prerequisite_variables
和makefile_with_eval_call_statements
內容不能去到一個單一的makefile片段:
- 如果我把
makefile_with_eval_call_statements
以上MYDEF
與makefile_with_prerequisite_variables
然後在$eval($call(MYDEF))
語句組合在一起它不會工作,因爲MYDEF
僅在之後被宣佈。 - 如果我把
makefile_with_prerequisite_variables
下面MYDEF
與makefile_with_eval_call_statements
在一起,然後在MYDEF
定義的食譜不會有正確的prerequisits因爲$(TARGET_$1_PREREQUISITES)
變量,然後由makefile_with_prerequisite_variables
聲明之後。
總之,我需要包含兩個不同的makefile,其中一個取決於另一個。我不知道如何表達這種關係,以至於只有在其他makefile是最新的並且包含在主makefile中後纔會創建一個makefile的內容。
你又一次拯救了我的一天!如果我能給你更多的讚揚,我會。你的建議都非常有價值。非常感謝! – josch