*** Нет правила для создания цели, ошибка Makefile в Win10

Во-первых, пожалуйста, не говорите мне, что это дубликат. Я знаю, но на многие вопросы, которые я просмотрел, были даны слишком конкретные ответы, чтобы помочь мне, и, откровенно говоря, половина из них прошла через мою голову. Я новичок в использовании Makefiles, и меня сбивает с толку, почему мой не работает.

Я уверен, что это что-то до боли простое, но, пожалуйста, протяните руку помощи, если вам понадобится дополнительная информация, я с радостью постараюсь ее найти и потерпите, потому что я делаю все это со своего телефона, потому что ИТ-отдел моего университета управляется обезьянами. В настоящее время это мой Makefile:

Makefile для задания 1

finish : main.o 
    g++ -o finish main.o

main.o :    
    g++ -c -g -Wall main.cpp

clean :       
    del main.o

(Извините, это не кооператив, я хочу прояснить, что перед командами есть необходимая вкладка)

Я запускаю это в Windows 10, используя компилятор GNU. Насколько я могу судить, он выглядит точно так же, как и предоставленный нам пример Makefile, за исключением имен файлов. Я знаю, что нахожусь в правильном каталоге, ничего не написано с ошибками, исходный файл должен существовать, потому что я смотрю на него, сидящего рядом с make-файлом. Я помню, что это общие исправления. Команда main.o работает отлично и компилирует исходный файл, но две другие просто выдают ошибку

make: *** Нет правила, чтобы цель «закончить / очистить». Стоп.

Я смущен, раздражен, новичок в Makefiles и Stack Overflow и просто ищу руку помощи. Любой совет будет очень признателен.


person A. Winter    schedule 13.09.2017    source источник
comment
Без исследования можно сказать, что чрезвычайно распространенная / сбивающая с толку ошибка в Makefiles заключается в том, что в них должны быть табуляции, а не пробелы.   -  person ti7    schedule 14.09.2017
comment
Боже, я бы хотел, чтобы это было так просто, у меня есть вкладки, просто у меня нет хорошего способа вставить это на свой телефон, а текстовое поле было привередливым   -  person A. Winter    schedule 14.09.2017
comment
он отлично работает на моей машине. Скопируйте и вставьте этот код на всякий случай. Вы уверены, что у вас есть файл main.cpp в том же каталоге, что и Makefile? Запускаю mingw32-make (возможно, поможет). Попробуйте запустить make main.o и посмотрите, что произойдет.   -  person Emil Terman    schedule 14.09.2017
comment
К сожалению, я не могу скопировать и вставить код, так как у меня все еще нет интернета, но мой кажется идентичным, я даже переписал его пару раз, чтобы убедиться. Я абсолютно уверен, что Makefile и main.cpp находятся в одном каталоге. У меня есть символическая ссылка (я уверен, что это термин) на mingw32-make, но я запустил ее, чтобы проверить и получить тот же результат. Самое странное, что main.o по-прежнему отлично работает. Оба других выдают мне ошибку, но с командой main.o нет ни одной проблемы ... Планирую укусить пулю и спросить моего профессора с такой скоростью   -  person A. Winter    schedule 14.09.2017
comment
Вы уверены, что Makefile использует именно этот make-файл? Попробуйте изменить рецепт в правиле main.o (g++ -c ...) на что-нибудь особенное (echo narcissus) просто для проверки.   -  person Beta    schedule 14.09.2017
comment
Бета, ты кое-что понял. Изменил команду на echo narcissus, как вы предлагали, и продолжил попытки скомпилировать main.cpp. Я удалил Makefile из каталога, но команда main.o все еще работает. То, что я сейчас не понимаю, это то, к чему он может пытаться получить доступ, потому что я точно использую окно cmd в правильном каталоге   -  person A. Winter    schedule 14.09.2017
comment
Ладно ... Думаю, я, возможно, решил проблему своей тупицей. Я где-то читал, что если вы выделите путь к файлу в адресной строке проводника и наберете cmd, он откроет командную строку для этого каталога, звучит удобно, поэтому я делал это, но теперь, когда я запустил cmd и перешел к каталог с компакт-диском, проблема, кажется, исчезла ... Я чувствую себя довольно глупо, но спасибо всем за то, что помогли мне разобраться с этим   -  person A. Winter    schedule 14.09.2017


Ответы (1)


Я вставляю свой пример:

CC = g++
CFLAGS = -g
test.o: test.cpp
    $(CC) $(CFLAGS) -c test.cpp
last.o: last.cpp
    $(CC) $(CFLAGS) -c last.cpp
program: test.o last.o
    $(CC) $(CFLAGS) -o program test.o last.o 
clean: 
    $(RM) test.o last.o

У меня возникла аналогичная проблема, попробуйте использовать $ (RM) вместо del

person 100RaBH    schedule 08.01.2021