man 手册中着么说道:-D name
Predefine name as a macro, with definition 1. name 是一个预定义,它和宏是一个意思,且 name 被定义为 1 。
用法如下演示:
[C++] 纯文本查看 复制代码 #include <stdio.h>
int main()
{
#ifdef __KERNEL__
printf (" __KERNEL__ is defined!\n");
printf ("__KERNEL__ = %d\n", __KERNEL__);
#else
printf ("__KERNEL__ not defined!\n");
#endif
return (0);
}
如果直接编译上面的代码:[beyes@SLinux gcc]$ gcc gccD.c -o gccD
[beyes@SLinux gcc]$ ./gccD
__KERNEL__ not defined! 用 -D 选项来编译:[beyes@SLinux gcc]$ gcc -D __KERNEL__ gccD.c -o gccD
[beyes@SLinux gcc]$ ./gccD
__KERNEL__ is defined!
__KERNEL__ = 1
比如在 linux 内核源代码的 compile.h 中有:
[C++] 纯文本查看 复制代码 #ifndef __ASSEMBLY__
可以在 Makefile 中找到相应的编译选项:KBUILD_AFLAGS := -D__ASSEMBLY__ |