预处理器如何解析linux内核头文件的路径?

46qrfjad  于 2023-03-01  发布在  Linux
关注(0)|答案(1)|浏览(113)

我是C编程语言的新手,目前正试图通过重新编译内核来向Linux内核添加新的syscall
当我阅读源代码时,我发现很难定位头文件的路径。
例如:

#include <linux/kernel.h>   /* for printk */
#include <linux/syscalls.h> /* for SYSCALL_DEFINE1 macro */

SYSCALL_DEFINE1(printmsg, int, i)
{
    printk(KERN_DEBUG "Hello! This is a msg %d", i);
    return 1;
}

这是我自定义的一个系统调用,我编辑了kernel/文件夹和syscall_64.tbl中的MakeFile,重新编译后,工作正常,没有编译错误。
但是我现在的问题是预处理器如何解析<linux/syscalls.h>这样的路径,根据我之前的理解,预处理器会到/usr/include文件夹中查找,当然/usr/include里面有***no***linux/syscalls.h
我发现linux/syscalls.h实际上是在linux的项目include/linux/中。
我想知道是什么使得项目中的预处理器搜索与include " "一样,而实际上它使用的是<>
我想知道这是不是因为makefile的某个部分?如果是,makefile中的哪个命令可以使这种情况发生?
谢谢你的帮助,如果我误解了什么,请告诉我。

tgabmvqs

tgabmvqs1#

预处理器有许多内置搜索路径(gpp -print-search-dirs),其他路径可以在运行时通过-Idir选项添加。

相关问题