Нет правила для создания цели `/ Makefile ', необходимого для` Makefile' - PullRequest
4 голосов
/ 21 января 2011

Я пытаюсь «сделать», используя довольно простой make-файл. Мой make-файл называется «Makefile», поэтому я просто использую команду «make».

Я получаю эту странную ошибку:
make: *** No rule to make target `/Makefile', needed by `Makefile'. Stop.

Если, однако, я использую make -f "full-path-to-makefile" это действительно работает (со странными последствиями ...). Я должен сказать, что я запускаю все это из каталога, где лежит Makefile, конечно.

Я работаю на Mac OSX, использую tcsh.

Edit:

Я работаю в среде LLVM, пытаюсь скомпилировать функцию прохода, и это связанный make-файл:

LEVEL = ../../../
LIBRARYNAME = FunctionName
LOADABLE_MODULE = 1
include $(LEVEL)/Makefile.common

Любые идеи будут оценены :)

Ответы [ 7 ]

2 голосов
/ 05 февраля 2011

У меня возникла та же проблема, когда я пытался написать новый проход для LLVM. Я следовал этим инструкциям, пытаясь создать HelloB (как уже ожидал Hello) http://llvm.org/docs/WritingAnLLVMPass.html#quickstart

Что мне нужно сделать, это сделать ./снова сконфигурируйте и сделайте из базовой директории.

1 голос
/ 22 января 2012

Просто чтобы добавить сюда некоторую информацию (так как это первое попадание, которое появляется в Google при поиске ошибки) - у меня возникла та же проблема, которая неожиданно всплыла при (ранее работающей) установке LLVM в OSX и проследилаВернемся к поведению команды realpath в make.

В частности, у меня был каталог с именем "LLVM / llvm-2.9-build", но по какой-то причине была предпринята попытка разрешить PROJECT_OBJ_ROOT вверхняя часть Makefile.config решит, что этот каталог на самом деле называется «llvm / llvm-2.9-build».Поскольку OSX по умолчанию не учитывает регистр, это не вызывает немедленной проблемы, за исключением того, что впоследствии для LLVM_SRC_ROOT будет установлено значение "LLVM / llvm-2.9-build".Это тогда означало, что создание PROJ_SRC_DIR с использованием patsubst для замены каталога объектов приведет к несуществующему пути (так как несопоставленный регистр означает, что замена шаблона не происходит), который, в свою очередь, будет разрешен в / по realpath.

Если для PROJ_SRC_DIR установлено значение /, это приводит к тому, что правило копирования make-файла в Makefile.rules решает, что исходный файл сборки находится в $ (PROJ_SRC_DIR) / Makefile (то есть / Makefile), и описывается сообщение об ошибке.

Кажется, что это только встроенная реализация realpath в Make (GNU Make 3.81 в моем случае), которая имеет такое поведение, поскольку принудительное использование макро-версии realpath из верхней части Makefile.config решает проблему.Тем не менее, это не является хорошим долгосрочным решением, так как вам придется вручную исправлять каждый из make-файлов LLVM.

В конце я не смог увидеть, где realpath будет получать нижний-case "llvm" from, но решил, что, возможно, это был какой-то артефакт некоторого кеширования имени с того момента времени, когда я ссылался на каталог, используя его имя в нижнем регистре.Поэтому я попытался перейти к этому каталогу и переместить его под совершенно другим именем, а затем вернуться к «LLVM», прежде чем снова приступить к сборке, и это, похоже, решило проблему.

Я надеюсь, что этодля кого-то еще, кто сталкивается с этой специфической странностью!

1 голос
/ 24 января 2011

Я нашел ответ, вроде:

Проблема была в процессе установки LLVM.Кажется, что если вы делаете установку в одном порядке, а не в другом, это может привести к этой ошибке.Это не имеет никакого смысла для меня, но после того, как я правильно установил его, все прекрасно компилируется (тот же код, тот же Makefile, та же программа make).

Я не знаю, почему это произошло, но я знаюкак это исправить:)

То, что вы хотите сделать, - это ./configure снова, затем создать из базового каталога (в отличие от того, что указано в инструкциях на сайте).Это сработало для меня.

Кстати - я получил те же результаты, что и на Ubuntu (с тем же исправлением).

1 голос
/ 22 января 2011

Я выхожу на конечность: у вас есть дополнительный слеш.Попробуйте опустить последний слеш в $ (LEVEL).

0 голосов
/ 06 мая 2015

вот мои исправления для этой проблемы: (https://github.com/rust-lang/rust/issues/24887#issuecomment-99391849)

обновить src / llvm / Makefile.config.in перед запуском ./configure

или обновление x86_64-apple-darwin / llvm / Makefile.config перед созданием

строка 59:

PROJ_SRC_DIR    := $(LLVM_SRC_ROOT)$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR))

обновление до

PROJ_SRC_DIR    := $(patsubst $(PROJ_OBJ_ROOT)%,$(LLVM_SRC_ROOT)%,$(PROJ_OBJ_DIR))

строка 86:

PROJ_SRC_DIR := $(call realpath, $(PROJ_SRC_ROOT)/$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR)))

обновление до

PROJ_SRC_DIR := $(call realpath, $(patsubst $(PROJ_OBJ_ROOT)%,$(PROJ_SRC_ROOT)%,$(PROJ_OBJ_DIR)))
0 голосов
/ 22 января 2011

Поскольку ваша строка включения гласит:

include $(LEVEL)/Makefile.common

странно, что вы не получаете сообщение об ошибке /Makefile.common. Если бы вы были, то я бы предположил, что, возможно, у вас есть конечный пробел после определения УРОВНЯ.

Может ли быть строка в Makefile.common, которая сама включает в себя $ (SOMEMACRO) / Makefile, и вы не установили значение SOMEMACRO?

0 голосов
/ 22 января 2011

Это не полный ответ, но вы видите, что gmake не может найти Makefile, который, как ему говорят, нужно включить, и поэтому пытается его переделать и терпит неудачу, потому что не может найти и рецепт для него.

Однако размещенный вами фрагмент Makefile не выдает сообщение об ошибке, которое вы видите, поэтому я думаю, что проблема в файле Makefile.common.Ищите операторы include, которые ссылаются на $ (некоторое расширение переменной) / Makefile и работают в обратном направлении.Вы также можете попробовать запустить gmake с опцией -d и выполнить обработку на основе вывода.

...