В недавнем выпуске я обнаружил, что DJGPP может принимать только ограничение на количество символов в командной строке DOS. Чтобы обойти это ограничение, я решил попробовать написать make-файл, чтобы позволить мне передавать более длинные строки . В процессе взлома make-файла и его тестирования я натолкнулся на странную ошибку. 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: *** No rule to make target `consoleio.c', needed by `consoleio.o'. Stop.
Чего я не понимаю, так это того, почему он пытается найти правило для файлов .c. Из того, что я понимаю, если файл есть, он должен просто использовать его. Как сделать так, чтобы make не нуждался в правиле для файлов .c?