2017-07-20 67 views
0

我正在編寫內核模塊來爲項目進行單元測試。 由於我需要在項目中包含源文件,我期望對這些文件使用絕對路徑。 這將使我的Makefile這樣使內核模塊makefile識別源代碼的絕對路徑?

foo-objs := dir1/src1.o dir1/src2.o 
foo-objs += dir2/src3.o src4.o 
foo-objs := $(addprefix $(PROJECT_ROOT),$(foo-objs)) 
... 
all: 
$(MAKE) -C /lib/modules/"$(shell uname -r)"/build M=$(PWD) 

$(PROJECT_ROOT)將是項目的根的環境變量記錄絕對路徑。

通過這種方式,我相信維護許多單元測試更加清晰和容易。

但是當我做make時,內核Makefile嘗試編譯$(PWD)/ $(PROJECT_ROOT)/src1.o,這當然不存在。看來將所有目標文件視爲相對路徑

因此,我想知道是否有辦法讓的內核Makefile爲模塊識別絕對路徑,非常感謝。

+0

熟悉用於* Makefile * s的'readlink','realpath'和預定義的內核變量,即'$(srctree)'。 – 0andriy

回答

0

我知道沒有辦法讓內核的Makefiles識別絕對路徑。

在我的項目中,我已將絕對路徑轉換爲相對路徑。這種轉換對於CMake來說很簡單,但我不確定如何在普通Make中做到這一點。您可以嘗試使用shell來達到此目的,請參閱this question

+0

https://0xax.gitbooks.io/linux-insides/content/Misc/how_kernel_compiled.html閱讀一個段落如何設置'$(srctree)'。 – 0andriy

+0

如果我理解正確,'srctree'指**內核源代碼樹**。它與**模塊**源的路徑有什麼關係? – Tsyvarev

+1

我認爲'realpath --relative-to = dir1 dir2'就是我想要的。 謝謝〜。 –