最近の問題で、DJGPP は DOS コマンド ラインの文字制限しか受け入れられないことがわかりました。この制限を回避するために、より長い文字列を渡すことができるようにメイクファイルを作成することにしました。メイクファイルをハッキングしてテストする過程で、奇妙なエラーに遭遇しました。メイクファイルは次のとおりです。
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.o' が必要とするターゲット `consoleio.c' を作成するルールはありません。止まる。
私が理解できないのは、.c ファイルのルールを見つけようとしている理由です。私が理解していることから、ファイルがそこにある場合は、それを使用するだけです。make で .c ファイルのルールを必要としないようにするにはどうすればよいですか?