makefile提示No rule to make target 'build-x86_64'错误如何修复?
排查步骤
- 确认执行
make build-x86_64的工作目录为Makefile所在根目录,不要在子目录下执行命令 - 检查规则缩进:Makefile中所有目标对应命令的行首必须使用tab缩进,不能用空格代替,否则规则会被make忽略
- 执行
make -p查看已加载的所有规则,确认build-x86_64规则是否被正常解析,是否因为语法错误被跳过 - 验证源码路径有效性:检查
src/impl/x86_64目录是否存在,目录下是否有.asm后缀的汇编文件。如果路径为空,x86_64_asm_source_files变量会被赋值为空,导致后续依赖解析失败 - 检查
build-x86_64规则的命令语法:原规则第一行命令mkdir -p dist/x86_64 && .中的单独.是非法语法,会导致整段规则失效
修复方案
- 替换所有规则命令行首的空格为tab缩进
- 修正
build-x86_64规则的第一行命令,将mkdir -p dist/x86_64 && .改为mkdir -p dist/x86_64 && \ - 确保
src/impl/x86_64路径下存在至少一个.asm后缀的汇编源文件 - 可在Makefile开头添加
$(info ASM source files: $(x86_64_asm_source_files))调试变量,执行make时查看输出的源码列表是否符合预期
修正后的完整Makefile参考:
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 $@) && \ nasm -f elf64 $< -o $@ .PHONY: build-x86_64 build-x86_64: $(x86_64_asm_object_files) mkdir -p dist/x86_64 && \ x86_64-elf-ld -n -o dist/x86_64/kernel.bin -T targets/x86_64/linker.ld $(x86_64_asm_object_files) && \ cp dist/x86_64/kernel.bin targets/x86_64/iso/boot/kernel.bin && \ grub-mkrescue /usr/lib/grub/i386-pc -o dist/x86_64/target.iso targets/x86_64/iso
内容的提问来源于stack exchange,提问作者ItsNova
相关产品推荐
相关产品推荐

