Разница между макросами препроцессора D__KERNEL__ и __KERNEL__ - PullRequest
0 голосов
/ 07 мая 2020

Я абсолютный новичок в программировании на ядре linux, извините, если вопрос прост.

Здесь https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch02s02.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).

1 Ответ

0 голосов
/ 07 мая 2020

-D - это опция компилятора (или препроцессора), указывающая ему определить макрос. Таким образом, размещение -D__KERNEL__ в командной строке компилятора - это то же самое, что размещение #define __KERNEL__ в верхней части файла. Аналогично, -DFOO определит макрос с именем FOO.

Никакой макрос с именем D__KERNEL__ здесь не определяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...