ошибка создания файла: Нет правила для создания цели, как исправить?

#makefile #compiler-errors

Вопрос:

Ошибка:

сделайте: *** Нет правила для создания целевого объекта «сборка-x86_64». Остановка.

Мой файл создания:

 x86_64_asm_source_files := $(shell find src/impl/x86_64 -name *.asm)
x86_64_asm_object_files := $(patsubst src/impl/x86_64/%.asm, build/x86_64/%.o, $(x86_64_asm_source_files))

$(x86_64_asm_object_files): build/x86_64/%.o : src/impl/x86_64/%.asm
    mkdir -p $(dir $@) amp;amp; 
    nasm -f elf64 $(patsubst build/x86_64/%.o, src/impl/x86_64/%.asm, $@) -o $@

.PHONY: build-x86_64
build-x86_64: $(x86_64_asm_object_files)
    mkdir -p dist/x86_64 amp;amp; .
    x86_64-elf-ld -n -o dist/x86_64/kernel.bin -T targets/x86_64/linker.ld $(x86_64_asm_object_files) amp;amp; 
    cp dist/x86_64/kernel.bin targets/x86_64/iso/boot/kernel.bin amp;amp; 
    grub-mkrescue /usr/lib/grub/i386-pc -o dist/x86_64/target.iso targets/x86_64/iso
 

Комментарии:

1. Каково имя файла этого файла makefile? Какую командную строку вы использовали для вызова make? Мне кажется make , что он не использует этот файл makefile.

2. 1. «Файл создания» (это единственный файл создания в моем проекте.). 2. Я использую Docker.

3. Я не знаю, что вы подразумеваете под «Я использую Докер» (я знаю, что такое Докер, просто это не помогает мне решить вашу проблему). make Команда не может найти этот файл makefile (я подозреваю). make будет искать файл makefile в рабочем каталоге, в котором он запущен. Если make не может найти файл makefile, то каталог, в котором вы его запускаете, не является каталогом, содержащим файл makefile… или имя файла makefile-это что-то другое, но вы говорите, Makefile что это нормально, поэтому это должен быть неправильный каталог.

4. О! Вот что я имел в виду: PS C:Hope OS> docker run --rm -it -v /root/env hopeos-buildenv root@7c0ee0e138ac:~/env# make build-x86_64 /root/env-это место, где находится мой файл makefile и остальная часть моего кода src

5. Основываясь на предоставленной информации, вы не можете объяснить ошибку, которую вы видите, поэтому здесь должно происходить что-то еще, чего мы не видим. Вы можете попробовать запустить make -p so, чтобы распечатать свою базу данных и посмотреть на вывод, чтобы увидеть build-x86_64 , есть ли цель. Вы можете запустить make -d , чтобы увидеть все, что делает make (он напечатает много материала, поэтому, вероятно, перенаправит его в файл, а затем использует less или что-то еще для его просмотра), включая файлы, которые он находит.