如何为内核模块 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
如何为内核模块 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
你应该EXTRA_CFLAGS
在你的Makefile
. 尝试以下几行:
obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc
test_module:
$(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules
请参阅此处的第 3.7Compilation Flags
节。
希望这可以帮助!
你确定你在你的文件中正确指定了包含吗?
例如:
#include "inc/something.h"
代替
#include <inc/something.h>
-I
是 GCC 标志,而不是 Make 标志。1 您需要将一个变量传递给您的“子”制作过程;也许是这样的:
$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules
whereCPPFLAGS
是隐式规则中使用的标准 Make 变量。随意使用您自己的变量,并确保在子制作中正确使用它。
Make 手册提供了有关 Make 实例之间通信变量的更多详细信息:http ://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion 。
对我来说,许多试验都失败了,直到其中一个成功了。$(src)
在路径中使用将使用ccflags-y
,例如:
# Include Paths
ccflags-y += -I$(src)/../../lib/include
对于比源文件夹高两级的目录“/lib/include”。
引用位于 src 树中的文件时,请始终使用 $(src) 特别是,如果您的源代码位于 Linux 内核树之外的目录中。