Makefile: «Нет правил для создания ... требуется «всем»», несмотря на то, что все файлы есть

avatar
Joshua
8 августа 2021 в 19:39
85
1
1

У меня странная проблема с этим make-файлом. Несмотря на наличие всех необходимых файлов .c, процесс компиляции останавливается на первой инструкции с этой ошибкой.

make: *** No rule to make target 'printerTest.umps', needed by 'all'. Stop.

Точный код с теми же файлами работает в Debian Linux, хотя в Manjaro Arch Linux он возвращает показанную выше ошибку.

Вот makefile.

ifneq ($(wildcard /usr/bin/umps3),)
    UMPS3_DIR_PREFIX = /usr
    LIBDIR = $(UMPS3_DIR_PREFIX)/lib/x86_64-linux-gnu/umps3
else
    UMPS3_DIR_PREFIX = /usr/local
    LIBDIR = $(UMPS3_DIR_PREFIX)/lib/umps3
endif

INCDIR = $(UMPS3_DIR_PREFIX)/include/umps3/umps
SUPDIR = $(UMPS3_DIR_PREFIX)/share/umps3

TDEFS = h/print.h h/tconst.h $(INCDIR)/libumps.e Makefile

CFLAGS = -ffreestanding -ansi -c -mips1 -mabi=32 -mfp32 -mno-gpopt -G 0 -fno-pic -mno-abicalls
# -Wall

LDAOUTFLAGS = -G 0 -nostdlib -T $(SUPDIR)/umpsaout.ldscript
LDCOREFLAGS =  -G 0 -nostdlib -T $(SUPDIR)/umpscore.ldscript

CC = mipsel-linux-gnu-gcc
LD = mipsel-linux-gnu-ld
AS = mipsel-linux-gnu-as -KPIC

EF = umps3-elf2umps
UDEV = umps3-mkdev

#main target
all: printerTest.umps strConcat.umps \
    fibEight.umps fibEleven.umps \
    terminalTest2.umps terminalTest3.umps terminalTest4.umps \
    terminalTest5.umps  \
    
%.o: %.c $(TDEFS)
    $(CC) $(CFLAGS) $<
    
%.t: %.o print.o  $(LIBDIR)/crti.o
    $(LD) $(LDAOUTFLAGS) $(LIBDIR)/crti.o $< print.o $(LIBDIR)/libumps.o -o $@
    
%.t.aout.umps: %.t
    $(EF) -a $<

%.umps: %.t.aout.umps
    $(UDEV) -f $@ $<

clean:
    rm -f *.o *.t *.umps

Спасибо всем, кто ответит заранее :)

Источник
Beta
9 августа 2021 в 00:46
0

Что произойдет, если вы попробуете make printerTest.o? Как насчет make -v?

the busybee
9 августа 2021 в 08:39
0

make -d также печатает множество отладочных материалов.

Joshua
9 августа 2021 в 11:18
0

@Beta make -v  выводит обычную информацию о GNU make, ничего необычного, в то время как make printerTest.o работает нормально... так что я действительно не знаю, что происходит T.T.

Joshua
9 августа 2021 в 11:24
0

@thebusybee make -d печатает МНОГО материала. Хотя последние несколько строк довольно интересны. Кажется, он даже не ищет printerTest.c, но я могу ошибаться. Вот полный вывод pastebin.com/12nrezx2

Joshua
9 августа 2021 в 11:33
0

Кроме того, если я попытаюсь собрать printerTest.umps, он выведет make: *** No rule to make target 'printerTest.umps'. Stop., так что...

Beta
9 августа 2021 в 12:58
0

Похоже, что Make не может ни найти, ни построить /usr/lib/x86_64-linux-gnu/umps3/crti.o (который ему нужен для сборки printerTest.t). У вас есть такой файл или исходный файл для него?

Joshua
9 августа 2021 в 22:52
0

@Beta, это была именно моя проблема. crti.o находился в /usr/lib/umps3/crti.o, поэтому я исправил путь, и теперь make-файл работает. Спасибо большое!!

Ответы (1)

avatar
Joshua
9 августа 2021 в 22:59
0

Как упоминалось в комментариях к вопросу, проблема заключалась в том, что файл crti.o находился в определенной скрытой папке. Большое спасибо людям, которые помогли мне в комментариях :)