В recent issue я обнаружил, что DJGPP может принимать только ограничение символов командной строки DOS. Чтобы обойти это ограничение, я решил попытаться написать файл makefile, чтобы разрешить мне pass longer strings. В процессе взлома файла makefile и его тестирования я столкнулся с странной ошибкой. Makefile выглядит следующим образом:Нет правила для создания цели consoleio.c
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 [email protected] $^
$(SOBJS) : %.o : %.asm
$(AS) $(ASFLAGS) $< -o [email protected]
$(COBJS) : %.o : %.c
$(CC) -c $< $(CFLAGS) -o [email protected]
При попытке запустить его, я получаю эту ошибку:
make: *** No rule to make target `consoleio.c', needed by `consoleio.o'. Stop.
То, что я не понимаю, почему он пытается найти правила для .c файлов. Насколько я понимаю, если файл есть, он должен просто использовать его. Как сделать make не нужно правило для .c файлов?
(a) Что заставляет вас думать, что make-файл может обойти ограничение командной строки? (b) Каков исходный файл для consoleio.o? (c) Разве это не слишком странно, чтобы кодировать в ассемблере вообще? – 2008-10-19 17:59:02
Продолжение: (d) И какая версия «make» вы нацеливаете с помощью: = присваиваний? Это нестандартная нотация. – 2008-10-19 18:00:04
(a) http://www.delorie.com/djgpp/v2faq/faq16_4.html (b) consoleio.c (c) Он есть для многозадачного заголовка и немного больше. – 2008-10-19 18:05:18