11

如何为内核模块 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
4

4 回答 4

19

你应该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节。 希望这可以帮助!

于 2012-04-16T16:23:57.390 回答
2

你确定你在你的文件中正确指定了包含吗?

例如:

#include "inc/something.h"

代替

#include <inc/something.h>
于 2012-04-16T15:11:05.813 回答
1

-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 。


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

于 2012-04-16T14:46:52.267 回答
0

对我来说,许多试验都失败了,直到其中一个成功了。$(src)在路径中使用将使用ccflags-y,例如:

# Include Paths
ccflags-y       += -I$(src)/../../lib/include 

对于比源文件夹高两级的目录“/lib/include”。

这是由Kernel.org中的声明驱动的

引用位于 src 树中的文件时,请始终使用 $(src) 特别是,如果您的源代码位于 Linux 内核树之外的目录中。

于 2021-08-23T16:04:53.967 回答