#ifdef CONFIG_IP_MULTIPLE_TABLES
struct fib_table * fib_hash_init(int id)
#else
struct fib_table * _ _init fib_hash_init(int id)
{
...
}
CONFIG_IP_MULTIPLE_TABLES
的值是如何填充的?
答案 0 :(得分:12)
您可以通过以下两种方式之一来实现:
#define CONFIG_IP_MULTIPLE_TABLES
对于许多编译器,请在编译命令行中定义它:
cc ... -DCONFIG_IP_MULTIPLE_TABLES
答案 1 :(得分:2)
它可以在之前已经看过的#define语句中,也可以传递给编译器(通常使用-D选项)。
答案 2 :(得分:1)
使用#define
。例如:
#define CONFIG_IP_MULTIPLE_TABLES
答案 3 :(得分:1)
我相信这就是你所要求的:
#define CONFIG_IP_MULTIPLE_TABLES
#ifdef CONFIG_IP_MULTIPLE_TABLES
struct fib_table * fib_hash_init(int id)
#else
struct fib_table * _ _init fib_hash_init(int id)
{
...
}
这将评估为
struct fib_table * fib_hash_init(int id)
答案 4 :(得分:1)
在C中编译时,首先运行C预处理器(CPP),这是一种简单的宏语言。 属性或绑定通常使用-D参数在此预处理器中传递。
如果为CONFIG_IP_MULTIPLE_TABLES传递-D,则会定义它。他会发生这种情况。
答案 5 :(得分:1)
CONFIG_IP_MULTIPLE_TABLES是在编译时传递给Linux内核的参数。如果您指的是相同的,则在配置文件中编译内核之前设置参数时进行设置。如果将其设置为Y,则gcc的编译器选项将定义宏。如果设置为N,则未定义。
在Y的情况下,编译struct fib_table * fib_hash_init(int id),并且在N struct fib_table * _ _init的情况下编译fib_hash_init(int id)。这是因为#ifdef和#else是预处理器指令,并且在编译器正确开始查看代码之前处理它们。
答案 6 :(得分:0)
以CONFIG_
开头的宏称为配置选项,当您执行make *config
时,它们会被填充。此时,您选择要在内核中集成的各种选项。选择完所需的选项后,会生成.config
文件,其中包含您选择的各种选项。
然后创建一个标头include/linux/autoconf.h
,其中包含与配置选项对应的宏的定义。对于每个编译的文件,此标头包含在命令行中。
每个配置选项都在Kconfig文件中描述,每个目录通常有一个Kconfig文件。描述语言的文档中有一个kconfig.txt。