提问人:MOHAMED 提问时间:4/16/2012 最后编辑:Oliver CharlesworthMOHAMED 更新时间:8/24/2021 访问量:26240
如何为内核模块 makefile 添加包含路径
How do I add an include path for kernel module makefile
问:
如何为内核模块 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
答:
1赞
Oliver Charlesworth
4/16/2012
#1
-I
是 GCC 标志,而不是 Make 标志。1 你需要将一个变量传递给你的 “sub” Make 进程;也许是这样的:
$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules
其中 是隐式规则中使用的标准 Make 变量。您可以随意使用自己的变量,并确保在子制作中正确使用它。CPPFLAGS
Make 手册提供了有关在 Make 实例之间通信变量的更多详细信息:http://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion。
1.实际上,它也是一个Make标志,但用于完全无关的东西。
评论
0赞
Oliver Charlesworth
4/16/2012
@MohamedKALLEL:是的,我弄错了。我已经更新了我的答案。
0赞
Oliver Charlesworth
4/16/2012
@MohamedKALLEL:您的子品牌是否使用默认规则进行 C 编译?如果不是,显式规则是否使用该变量?CPPFLAGS
2赞
ticcky
4/16/2012
#2
您确定在文件中正确指定了包含吗?
例如:
#include "inc/something.h"
而不是
#include <inc/something.h>
19赞
another.anon.coward
4/17/2012
#3
您应该在 .尝试以下几行:EXTRA_CFLAGS
Makefile
obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc
test_module:
$(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules
请参阅此处的第 3.7 节。
希望这有帮助!Compilation Flags
评论
4赞
hesham_EE
10/28/2014
这非常有用。阅读较新的文档,似乎EXTRA_CFLAGS现在已被弃用。您可以使用 ccflags-y=-I$(PWD)/inc 而不是 EXTRA_CFLAGS。在此处查看第 3.7 节。
0赞
Chan Kim
7/21/2021
EXTRA_CFLAGS似乎也在起作用。并且路径应指定为从内核构建目录(用 -C 指定的目录)中看到的路径。
0赞
vmemmap
10/13/2022
文档明确提到您应该使用 .Flags with the same behaviour were previously named: EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS. They are still supported but their usage is deprecated.
ccflags-y
3赞
Bassem Ramzy
8/24/2021
#4
对我来说,许多试验都失败了,直到其中一次成功。
在路径中使用将使用 ,例如:$(src)
ccflags-y
# Include Paths
ccflags-y += -I$(src)/../../lib/include
对于从源文件夹向上两级的目录“/lib/include”。
这是由 Kernel.org 中的语句驱动的
引用位于 src 树中的文件时,请始终使用 $(src) 特别是,如果您的源代码位于 Linux 内核树之外的目录中。
评论
0赞
goodman
5/2/2023
是的,我尝试使用而不是,但它不起作用。感谢您的参考链接。$(CURDIR)
$(src)
评论