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/ |