434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
1

Ошибка в makefile

05.11.2013, 22:01. Показов 651. Ответов 6
Метки нет (Все метки)

makifile
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Исходные объектные модули
SOURCES=init.o main.o 
# Флаги компилятора языка C
CFLAGS=-nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -g
# Флаги компоновщика
LDFLAGS=-T link.ld -m elf_i386 
# Флаги ассемблера
ASFLAGS=--32
# Правило сборки
all: $(SOURCES) link
# Правило очистки
clean:
    -rm *.o kernel    
# Правило компоновки 
link:
    ld $(LDFLAGS) -o kernel $(SOURCES)
main.c
C
1
2
3
4
5
6
7
int main(void)
{
 
  /* Тут будет расположен код ядра */
 
  return 0;
}
init.s
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*-------------------------------------------------
//
// Код инициализации и мультизагрузки
//    
//-----------------------------------------------*/
.code32
 
/*-------------------------------------------------
//    Константы для заголовка Multiboot
//-----------------------------------------------*/
.set MBOOT_HEADER_MAGIC, 0x1BADB002
.set MBOOT_HEADER_FLAGS, 0x00000001
.set MBOOT_CHECKSUM, -(INIT_MBOOT_HEADER_MAGIC+INIT_MBOOT_HEADER_FLAGS)
 
/* Указываем что функция main - внешняя и расположена в другом
 объектном модуле */ 
.extern main
 
/* Секция - заголовок мультизагрузки */
.section .mboot
 
.int MBOOT_HEADER_MAGIC
.int MBOOT_HEADER_FLAGS
.int MBOOT_CHECKSUM
 
/* Секция кода */
.section    .text
 
/* Делаем точку входа глобальной, доступной для компоновщика */
.global      init
 
init:
        cli /* Выключаем ВСЕ прерывания */
        
        push    %eax /* Заталкиваем в стек */
        push    %ebx /* регистры общего назначения */
        
        call    main /* вызываем main */
        
        hlt /* Останавливаем процессор */
        
loop: /* Переходим в бесконечный цикл */
        jmp    loop
link.ld
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ENTRY (init)
 
SECTIONS
{
/* Адрес, с которого будет начинаться код ядра в памяти */
    . = 0x00100000;
/* Секция кода */
 
    .text ALIGN (0x1000) :
    {
        *(.mboot)
        *(.text)
    }
/* Секция инициализированных данных */
    .data ALIGN (0x1000) :
    {
        *(.data)
    }
/* Секция неинициализированных данных */     
 
    .bss :
    {
        *(.bss)
    }
/* Место в памяти, где уже нет кода ядра */
    end = .; _end = .; __end = .;    
}
Код
motoroller@motoroller ~/myOS/src $ make
makefile:13: *** missing separator.  Stop.
Добавлено через 1 минуту
брал вот тут http://phantomexos.blogspot.ru... iboot.html
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2013, 22:01
Ответы с готовыми решениями:

Ошибка в Makefile
Проект на несколько файлов, поэтому решил написать makefile. Нашел шаблон и немного его видоизменил...

При запуске Makefile выдается ошибка "Makefile:2: recipe for target 'all' failed"
решила поучиться собирать проекты через мэйкфайлы. Пожалуйста, помогите разобраться all:...

Make, makefile, simple makefile, hello_world
Всем привет! Разбираюсь с мэйк-файлами. Проблема следующая: не понятен сам принцип обработки...

Ошибка: [Makefile] Error 3
Привет. Установил Qt, собрал профиль, но пустой проект не запускается. Помогите разобраться! см...

6
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
06.11.2013, 19:42 2
Зачем перед rm стоит минус?
1
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
06.11.2013, 19:55  [ТС] 3
Цитата Сообщение от NoMasters Посмотреть сообщение
Зачем перед rm стоит минус?
не знаю

Добавлено через 12 минут
убрал - таже ошибка
0
194 / 193 / 15
Регистрация: 12.12.2010
Сообщений: 270
06.11.2013, 21:00 4
а табы у тебя соблюдаются?

Добавлено через 4 минуты
kernel что такое? make видимо тоже не понимает...
1
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
06.11.2013, 22:52  [ТС] 5
Цитата Сообщение от zalogic Посмотреть сообщение
kernel
целевой файл. все должно слинковаться в него
0
920 / 637 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
07.11.2013, 10:44 6
1. Перед правилами сборки (у вас это rm и ld) стоит знак табуляции? (инче make выдаст ушибку)
2. У вас нет правила сборки объектных файлов, эти файлы имеются в текущем каталоге?
1
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
07.11.2013, 10:53  [ТС] 7
gng, спасибо, табуляция помогла а сборку объектных файлов он сам как-то делает. все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2013, 10:53
Помогаю со студенческими работами здесь

Ошибка компиляции с Makefile
Хотел бы объяснить нормально, но сам мало чего понимаю. В общем, я хочу получить статическую...

Makefile. Ошибка. C++ 2011 standard
Доброго времени суток. При запуске make получаю ошибку: "Building CXX object...

Странная ошибка makefile.win
Код: #include <iostream> using std::cout; using std::cin; using std::endl; int main(int...

Ошибка при компиляции из makefile-а
Доброго дня. Проблема в следующем. Есть исходники готового проекта, написанного на C. Такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru