在linux内核编程方面,我是一个绝对的初学者,如果问题太初级,请见谅。
在这里,我的问题是 https:/www.oreilly.comlibraryviewlinux-device-drivers0596000081ch02s02.html 我找到了下面的例子。
# Change it here or specify it on the "make" command line
KERNELDIR = /usr/src/linux
include $(KERNELDIR)/.config
CFLAGS = -D__KERNEL__ -DMODULE -I$(KERNELDIR)/include \ -O -Wall
ifdef CONFIG_SMP
CFLAGS += -D__SMP__ -DSMP
endif
all: skull.o
skull.o: skull_init.o skull_clean.o
$(LD) -r $^ -o $@
clean:
rm -f *.o *~ core
而我的问题是,简单的说,前处理器的宏有什么区别?__KERNEL__
和用过的 -D__KERNEL__
? 特别是这里的"-D "是什么意思? (顺便说一下,这个故事和 MODULE
和 -DMODULE
).
-D
是一个 选项的编译器 或预处理器),告诉它定义一个宏。 所以把 -D__KERNEL__
在编译器命令行中,与把 #define __KERNEL__
在文件的顶部。 同样地, -DFOO
将定义一个名为 FOO
.
没有命名的宏 D__KERNEL__
这里的任何地方都被定义为。