2017-07-20 95 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'就是我想要的。 谢谢〜。 –