我有一個主要的內核模塊,與其他內核模塊進行通信。我已經結構化這樣的模塊(概念):Makefile變量替換顯然沒有完成即使:=在聲明中使用
main module/
|
\drivers/
|
|\driver1
|\driver2
\driver3
由於這些內核模塊,我需要編譯他們是這樣的:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
然而,由於驅動程序的Makefile文件可以被稱爲之前的目錄中,我需要在調用其他make(linux的make)之前執行$(shell pwd)
。因此,Makefile現在看起來像這樣:
CURRENT_DIR := $(shell pwd)
.PHONY: all
all:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(CURRENT_DIR) modules
到目前爲止,它很好,它的工作原理完美。問題是這樣的:我有一個驅動程序需要包含的文件,所以我必須提供包含路徑。我第一次嘗試
EXTRA_CFLAGS += -I../..
並立即明白了爲什麼它不起作用(相對路徑將是/ lib/module/...不是當前目錄)。所以我把它改爲:
MAIN_MODULE_HOME := $(CURRENT_DIR)/../..
EXTRA_CFLAGS += -I$(MAIN_MODULE_HOME)
奇怪的是,這是行不通的!如果我寫
EXTRA_CFLAGS += -Ipath/I/get/from/pwd/../..
手動,它編譯!有人能解釋我做錯了什麼嗎?致電前,我echo
ed $(CURRENT_DIR)
和$(MAIN_MODULE_HOME)
和變量是有意義的。
我知道EXTRA_CFLAGS
不立即進行評估,但由於CURRENT_DIR
和MAIN_MODULE_HOME
與:=
聲明我不明白事情是如何得到搞砸。
(如果任何人都可以短語問題的標題更好,請不要!)
豎起大拇指!任何解釋爲什麼Eldar的答案不起作用? – Shahbaz 2012-01-05 16:11:47
+1,非常簡單的解決方案。 – 2012-01-05 16:19:17
關於您添加的行:_Kbuild系統不使用EXTRA_CFLAGS和其他一些環境變量._我懷疑這是真的。我**使用'EXTRA_CFLAGS'和-I/path/to /什麼,它工作。問題出在什麼時候/ path/to /什麼變量裏面。否則,似乎使用了'EXTRA_CFLAGS' – Shahbaz 2012-01-05 22:19:48