Makefile из xv6

Я читаю код xv6, и мне трудно читать Makefile. Не могли бы вы рассказать мне, как работают следующие утверждения:

1. "CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector)"
2. "LDFLAGS += -m $(shell $(LD) -V | grep elf_i386 2>/dev/null)"
3. "xv6.img: 
bootblock kernel fs.img 

dd if=/dev/zero of=xv6.img count=10000

dd if=bootblock of=xv6.img conv=notrunc

dd if=kernel of=xv6.img seek=1 conv=notrunc"

А как узнать Makefile в деталях? Не могли бы вы порекомендовать несколько хороших книг?

Спасибо!

2 ответа

Решение
  1. CFLAGS варианты (как -fno-stack-protector-E и т. д.) вы переходите к компилятору CC, $(CC) будет заменен фактическим компилятором. т.е. CC перед этим нужно инициализировать чем-то вроде set CC=gcc,

  2. LDFLAGS варианты (для вашего компоновщика LD, += так же, как ваш += оператор в C. Он обновляет уже существующее значение CFLAGS а также LDFLAGS

  3. Эта строка означает, что xv6.img зависит от bootblockkernelfs.img, То есть мы говорим make что для того, чтобы построить xv6.imgнужно построить bootblockkernel а также fs.img первый

Вы можете узнать о команде dd здесь

Вот полное энциклопедическое руководство по make а также Makefiles

http://www.gnu.org/software/make/manual/make.html

Чтобы добавить к ответу, ddКоманда действует как команда копирования, по сути, берет входной файл [if] и копирует его содержимое в выходной файл [of]. Счетчик - это индикатор количества блоков, которые нужно скопировать.

Предоставленный вами код связан со сборкой файла xv6.img, который содержит загрузчик, файловую систему и ядро. По сути, код копирует 10000 блоков нулей из файла / dev / zero в xv6.img. За этим следует копирование из загрузочного блока (созданного bootasm.S и bootmain.c, как его видит цель Makefile) в сектор 0. За этим следует поиск одного сектора и последующее копирование ядра в файл образа.

Другие вопросы по тегам