如何为内核模块makefile添加包含路径

MOH*_*MED 8 c makefile linux-kernel

如何为内核模块makefile添加包含路径?我想在test_module.c中包含"test_kernel.h"."test_kernel.h"驻留在其他目录"inc"中我在Makefile中的以下解决方案中尝试但是它不起作用:

obj-m += test_module.o

test_module:
    $(MAKE) -C "$(LINUX_DIR)" -Iinc $(MAKE_OPTS) modules
Run Code Online (Sandbox Code Playgroud)

ano*_*ard 15

你应该利用EXTRA_CFLAGS你的Makefile.尝试这些方面的东西:

obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc

test_module:
    $(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules
Run Code Online (Sandbox Code Playgroud)

请参见此处的第3.7 Compilation Flags节. 希望这可以帮助!

  • 这是非常有用的。阅读较新的文档,现在似乎不推荐使用 EXTRA_CFLAGS。您可以使用 ccflags-y=-I$(PWD)/inc 而不是 EXTRA_CFLAGS。检查第 3.7 节 [此处](https://www.kernel.org/doc/Documentation/kbuild/makefiles.txt)。 (4认同)

Oli*_*rth 1

-I是 GCC 标志,而不是 Make 标志。1 您需要将一个变量传递给您的“子”Make 流程;也许是这样的:

$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules
Run Code Online (Sandbox Code Playgroud)

其中CPPFLAGS是隐式规则中使用的标准 Make 变量。请随意使用您自己的变量,并确保它在子 make 中正确使用。

Make 手册提供了有关 Make 实例之间通信变量的更多详细信息:http://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion


1. 实际上,它也是一个 Make 标志,但用于完全无关的东西。