OSDev
http://osdev.su/

makefile для ОС
http://osdev.su/viewtopic.php?f=5&t=219
Страница 1 из 1

Автор:  Himik [ 01 ноя 2008, 12:34 ]
Заголовок сообщения:  makefile для ОС

Как делаются makefile для компиляции ОС? Какая основная структура и ключи сборки, как учитывать сложную структуру проекта, и т.д.? Тоесть всё про makefile.

Автор:  whitequark [ 01 ноя 2008, 17:35 ]
Заголовок сообщения:  Re: makefile для ОС

Я использовал сильно упрощенную систему сборки от Linux'а. В двух словах:
главный Makefile определяет все базовые target'ы (.o, хотя тебе советую сделать .c.o, так удобнее, и собственно ядро), и инклудит Makefile'ы для различных частей ядра. В них определяется переменная objects-XXX (XXX -- назание части), в которую заносится список исходников. При обработке в основном Makefile из списка исходников получается список объектников, который и обрабатывается.
См. в git

Автор:  Himik [ 02 ноя 2008, 17:04 ]
Заголовок сообщения:  Re^2: makefile для ОС

Хороший пример. А что такое .c.o?

Автор:  whitequark [ 02 ноя 2008, 21:57 ]
Заголовок сообщения:  Re^3: makefile для ОС

Обычно код на C компилируется в объектники с расширением .o. Но, если в системе сборки изначально задается список исходников, дописать .o в конец проще, чем менять исходное расширение. (ср. test.c -> test.o или test.c -> test.c.o)

Автор:  Гость [ 03 ноя 2008, 09:55 ]
Заголовок сообщения:  Re: makefile для ОС

Эммм, так ведь в gcc все равно придется писать выходной файл. А строка test.o пишется проще чем test.c.o Или вы их бех компиляции собираете?

Автор:  grindars [ 03 ноя 2008, 11:27 ]
Заголовок сообщения:  Re^2: makefile для ОС

вот тебе пример:
Код:
all: target

target: main.o foo.o bar.o
 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

%.o: %.c
 %(CC) $(CFLAGS) $(CPPFLAGS) $< -o $@

Автор:  whitequark [ 03 ноя 2008, 15:49 ]
Заголовок сообщения:  Re^2: makefile для ОС

Так у меня в списки объектов для компиляции заносятся исходники, чтобы можно было по ним пройтись makedepend'ом (скрипт, который генерирует и добавляет в конец Makefile'а зависимости c-кода от хедеров), а в качестве зависимостей для ядра нужно указывать .o. А добавить в конец .o проще, чем заменять на него .c. (ср. addsuffix и много patsubst, для каждого из возможных расширений: .c, .cpp, .S)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/