在最近的一期中,我发现 DJGPP 只能接受 DOS 命令行字符限制。为了解决这个限制,我决定尝试编写一个 makefile 来允许我传递更长的字符串。在编写一个makefile并对其进行测试的过程中,我遇到了一个奇怪的错误。生成文件如下:
AS := nasm
CC := gcc
LD := ld
TARGET := $(shell basename $(CURDIR))
BUILD := build
SOURCES := source
CFLAGS := -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions \
-nostdinc -fno-builtin -I./include
ASFLAGS := -f aout
export OUTPUT := $(CURDIR)/$(TARGET)
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
SOBJS := $(SFILES:.s=.o)
COBJS := $(CFILES:.c=.o)
OBJS := $(SOBJS) $(COBJS)
build : $(TARGET).img
$(TARGET).img : $(TARGET).bin
concat.py
$(TARGET).bin : $(OBJS)
$(LD) -T link.ld -o $@ $^
$(SOBJS) : %.o : %.asm
$(AS) $(ASFLAGS) $< -o $@
$(COBJS) : %.o : %.c
$(CC) -c $< $(CFLAGS) -o $@
尝试运行它时,我收到此错误:
make: *** 没有规则来制作目标 `consoleio.c',`consoleio.o' 需要。停止。
我不明白为什么它试图为 .c 文件找到规则。据我了解,如果文件在那里,它应该只使用它。如何使 make 不需要 .c 文件的规则?