Здравствуйте. Есть следующая структура каталогов:
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. Тут нельзя вставлять спойлеры или я искал плохо?