gpt4 book ai didi

c - Makefile:尽管给出了目标,但没有制定目标的规则?

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:29 26 4
gpt4 key购买 nike

在尝试使用 Make 时出现以下错误:

make: *** No rule to make target `paging.c', needed by `obj/paging.o'. Stop.

But I have given the makefile the rule for making the target. Here's my makefile:

                                                                 --------
C_SOURCES= main.c monitor.c common.c descriptor_tables.c timer.c paging.c \
fs.c initrd.c task.c syscall.c --------
S_SOURCES= boot.s interrupt.s gdt.s process.s
C_OBJECTS=$(patsubst %.c, obj/%.o, $(C_SOURCES))
S_OBJECTS=$(patsubst %.s, obj/%.o, $(S_SOURCES))
CFLAGS=-c -nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders
LDFLAGS=-Tlink.ld -melf_i386 --oformat=elf32-i386
ASFLAGS=-felf

all: kern/kernel

.PHONY: clean
clean:
-rm -f obj/*.o kern/kernel

kern/kernel: $(S_OBJECTS) $(C_OBJECTS)
ld $(LDFLAGS) -o $@ $^

$(C_OBJECTS): obj/%.o : source/%.c
gcc $(CFLAGS) $< -o $@

vpath %.c source

$(S_OBJECTS): obj/%.o : %.s
nasm $(ASFLAGS) $< -o $@

vpath %.s asem

注意:-------- 不在原始 makefile 中,它们只是用来选择我使用的规则。

制作输出:

nasm -felf asem/boot.s -o obj/boot.o
nasm -fenasm -felf asem/boot.s -o obj/boot.o
nasm -felf asem/interrupt.s -o obj/interrupt.o
nasm -felf asem/gdt.s -o obj/gdt.o
nasm -felf asem/process.s -o obj/process.o
gcc -c -nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders source/main.c -o obj/main.o
gcc -c -nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders source/monitor.c -o obj/monitor.o
gcc -c -nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders source/common.c -o obj/common.o
gcc -c -nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders source/descriptor_tables.c -o obj/descriptor_tables.o
gcc -c -nostdlib -nostdinc -fno-builtin -fno-stack-protector -m32 -Iheaders source/timer.c -o obj/timer.o
make: *** No rule to make target `source/paging.c', needed by `obj/paging.o'. Stop.

为什么尽管给了它需要的东西,它还是出现了错误?

最佳答案

你必须换行

$(C_OBJECTS): obj/%.o : %.c

$(C_OBJECTS): obj/%.o : source/%.c

编辑,反射(reflect)问题的变化:

void page_fault(registers_t regs)
void page_fault(registers_t *regs);

比较 ;) 两者应该是一样的。根据 paging.c 的代码块,paging.h 中的版本应该更正(只需删除 *)。

关于c - Makefile:尽管给出了目标,但没有制定目标的规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com