OSDev http://osdev.su/ |
|
У rm внутри make сносит крышу http://osdev.su/viewtopic.php?f=6&t=853 |
Страница 1 из 1 |
Автор: | sh2ezo [ 16 янв 2014, 19:11 ] |
Заголовок сообщения: | У rm внутри make сносит крышу |
Здравствуйте. Есть следующая структура каталогов: 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 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |