如何为内核模块的 Makefile 添加一个 include 路径?我想在 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 添加一个 include 路径?我想在 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
中应该使用EXTRA_CFLAGS
。请尝试使用以下内容:
obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc
test_module:
$(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules
可以查看第3.7节 编译标志
,在这里。
希望对你有所帮助!
$(src)
可以在ccflags-y
中实现它:# Include Paths
ccflags-y += -I$(src)/../../lib/include
对于一个目录"/lib/include",它是源文件夹的两个级别之上。
这是从Kernel.org的声明中推出的。
始终使用$(src)来引用位于src树中的文件,特别是如果您的源代码位于Linux内核树之外的目录中。
$(CURDIR)
代替$(src)
,但它没有起作用。谢谢你提供的参考链接。 - goodman$(CURDIR)
代替$(src)
,但它没有起作用。感谢您提供的参考链接。 - goodman您确定在文件中正确指定了include吗?
例如:
#include "inc/something.h"
替代
#include <inc/something.h>
-I
是 GCC 的标志,而不是 Make 的标志。1 你需要将一个变量传递给你的“子”Make进程;可能是这样的:
$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules
CPPFLAGS
是一个标准Make变量,用于隐式规则中。您可以自行使用其他变量,并确保在子Make中适当使用。
Make手册提供了更多关于在Make实例之间传递变量的详细信息:http://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion。
ccflags-y
。 - Roi