Ошибка make-файла gcc: «Нет правила для создания цели ...» - PullRequest
316 голосов
/ 07 мая 2009

Я пытаюсь использовать GCC (linux) с make-файлом для компиляции моего проекта.

Я получаю следующую ошибку, которая не может расшифроваться в этом контексте:

"No rule to make target 'vertex.cpp', needed by 'vertex.o'.  Stop."

Это make-файл:

a.out: vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
    g++ vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o

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

vertex.o: vertex.cpp vertex.h
    g++ -c vertex.cpp

edge.o: edge.cpp edge.h
    g++ -c num.cpp

vlist.o: vlist.cpp vlist.h
    g++ -c vlist.cpp

elist.o: elist.cpp elist.h
    g++ -c elist.cpp

vnode.o: vnode.cpp vnode.h
    g++ -c vnode.cpp

enode.o: enode.cpp enode.h
    g++ -c node.cpp

Ответы [ 18 ]

0 голосов
/ 26 декабря 2018

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

0 голосов
/ 26 сентября 2018

Эта ошибка произошла для меня в Travis, когда я забыл добавить новые файлы в мой репозиторий git. Глупая ошибка, но я вижу, что это довольно часто.

0 голосов
/ 17 мая 2018

Существует несколько причин этой ошибки.

Одной из причин, по которой я столкнулся с этой ошибкой, является сборка для Linux и Windows.

У меня есть имя файла с заглавными буквами BaseClass.h SubClass.h Unix поддерживает соглашение о именовании файлов с учетом регистра, а в Windows регистр не учитывается.

C ++, почему люди не используют заглавные буквы в именах заголовочных файлов?

Попробуйте скомпилировать чистую сборку с помощью gmake clean, если вы используете gmake

Некоторые текстовые редакторы имеют настройки по умолчанию для игнорирования имен файлов с учетом регистра. Это также может привести к той же ошибке.

как добавить файл C ++ в Qt Creator, имя которого начинается с заглавных букв? Это автоматически делает его маленькой буквой

0 голосов
/ 08 января 2018

В моем случае путь не задан в VPATH, после добавления ошибка исчезла.

0 голосов
/ 07 декабря 2014

В моем случае это произошло из-за того, что я вызвал Makefile: MAKEFILE (все заглавные буквы)

0 голосов
/ 31 декабря 2016

Еще один пример странной проблемы и ее решения:

Это:

target_link_libraries(
    ${PROJECT_NAME}
    ${Poco_LIBRARIES}
    ${Poco_Foundation_LIBRARY}
    ${Poco_Net_LIBRARY}
    ${Poco_Util_LIBRARY}
    )

дает: make[3]: *** No rule to make target '/usr/lib/libPocoFoundationd.so', needed by '../hello_poco/bin/mac/HelloPoco'. Stop.

Но если я удаляю Poco_LIBRARIES, это работает:

target_link_libraries(
    ${PROJECT_NAME}
    ${Poco_Foundation_LIBRARY}
    ${Poco_Net_LIBRARY}
    ${Poco_Util_LIBRARY}
    )

Я использую clang8 на Mac и clang 3.9 на Linux Проблема возникает только в Linux, но работает на Mac!

Я забыл упомянуть: Poco_LIBRARIES был не прав - он не был установлен cmake / find_package!

0 голосов
/ 02 июня 2016

В моем случае исходные и / или старые объектные файлы были заблокированы (только для чтения) в полуразрушенной среде IDE или из облачной службы резервного копирования, которая перестала работать должным образом. Перезапуск всех программ и служб, связанных со структурой папок, решил проблему.

0 голосов
/ 17 декабря 2014

Я получаю ту же ошибку при копировании только исходного каталога в другое место.

Эта проблема была решена после того, как я тоже переместил каталог сборки.

...