OSDev

для всех
Текущее время: 14 дек 2024, 07:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: У rm внутри make сносит крышу
СообщениеДобавлено: 16 янв 2014, 19:11 

Зарегистрирован: 31 июл 2013, 09:40
Сообщения: 28
Здравствуйте. Есть следующая структура каталогов:
project
--bin
--source
----kernel32
----kernel64
----basicout
----memory
В каталогах source, kernel32 и kernel64 имеются Makefile'ы следующего содержания:
source/Makefile:
Код:
projects := kernel32 kernel64

all:
   for i in $(projects); do \
      make -C $$i $$i; \
   done

img:
   cd ..
   mkdir bin/boot
   mkdir bin/boot/grub
   echo default 0 > bin/boot/grub/menu.lst
   echo timeout 0 >> bin/boot/grub/menu.lst
   echo title My kernel >> bin/boot/grub/menu.lst
   echo kernel /kernel32 >> bin/boot/grub/menu.lst
   echo module /kernel64 >> bin/boot/grub/menu.lst
   echo boot >> bin/boot/grub/menu.lst
   cp grub_files/stage2_eltorito bin/boot/grub/stage2_eltorito
   genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o boot.iso bin

   
clean:
   for i in $(projects); do \
      make -C $$i clean; \
   done
   cd ../bin
   rm *
   

source/Build:
Код:
include_dirs := /usr/include /usr/local/include
output_dir := ../../bin
source_dirs := . ../memory ../../include ../basicout
search_wildcard  s := $(addsuffix /*.cpp,$(source_dirs)) $(addsuffix /*.asm,$(source_dirs))

$(program_name): $(notdir $(patsubst   %.asm,%.o,$(patsubst   %.cpp,%.o,$(wildcard   $(search_wildcard  s)))))
   ld -T link.ld $(ld_flags) $^ -o $(output_dir)/$@

clean:
   rm *.o
   rm *.d
   
VPATH := $(source_dirs)
%.o: %.cpp
   g++ $(cpp_flags) -c -MD $(addprefix -I ,$(source_dirs)) $(addprefix -I ,$(include_dirs)) $<

%.o: %.asm
   fasm $<

include $(wildcard   *.d)


kernel32/Makefile:
Код:
program_name := kernel32
cpp_flags := -m32
ld_flags := -m elf_i386

include ../Build

kernel64/Makefile:
Код:
program_name := kernel64
cpp_flags := -m64
ld_flags := -m elf_x86_64

include ../Build


Захожу в source и набираю:
Код:
make clean

Срабатывает цикл и начинают вызываться дочерние мейкфайлы. На rm мейк стопорится и говорит, что файл "*.o" не найден. Также он говорит про *.d и про *
Сначала думал, что виноват тот факт, что редактирую файлы под виндой, но преобразование конца строк к Unix-формату не помогло. Далее попробовал засунуть clean непосредственно в Мейкфайлы kernel32 и kernel64. Не помогло. Если напрямую вызывать rm внутри нужных каталогов, то всё работает. Также не помогает ручной переход в каталоги и вызов make clean.
Прошу помощи в решении траблы.


P.S. Тут нельзя вставлять спойлеры или я искал плохо?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB