没有规则来制作'Makefile'所需的目标`/ Makefile'

时间:2011-01-21 20:18:46

标签: macos makefile llvm gnu-make

我正在尝试使用非常简单的makefile'make'。我的makefile名为'Makefile',所以我只是使用命令'make'。

我得到了这个奇怪的错误:
make: *** No rule to make target `/Makefile', needed by `Makefile'. Stop.

但是,如果我使用 make -f "full-path-to-makefile"它确实会运行(带来奇怪的后果......)。我应该说我正在从Makefile所在的目录运行所有这些。当然。

我正在使用tcsh在Mac OSX上工作。

编辑:

我正在使用LLVM框架,尝试编译传递函数,这是关联的makefile:

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

任何想法将不胜感激:)

7 个答案:

答案 0 :(得分:2)

我在尝试为LLVM编写新传递时遇到同样的问题我按照这些说明尝试创建HelloB(如已经存在的Hello)http://llvm.org/docs/WritingAnLLVMPass.html#quickstart

我要做的是再次执行./configure,然后从基目录创建。

答案 1 :(得分:1)

我会走出困境:你有一个额外的斜线。尝试省略$(LEVEL)中的最终斜杠。

答案 2 :(得分:1)

我找到了答案,有点:

问题在于LLVM的安装过程。看来,如果您按一个顺序而不是另一个顺序进行安装,则可能导致此错误。它对我来说没有任何意义,但在我正确安装之后,所有内容都编译得很好(相同的代码,相同的Makefile,同样的make程序)。

我真的不知道为什么会这样,但我知道如何解决它:)

你想要做的是./configure再从基础目录制作(与网站上的说明相反)。这对我有用。

BTW - 我在Ubuntu上运行了相同的结果(使用相同的修复程序)。

答案 3 :(得分:1)

这里只是添加一些信息(因为这是Google在查找错误时首次出现的问题) - 我遇到了同样的问题,突然出现在OSX上的(以前正在运行的)LLVM设置上,并且跟踪它回到make中的realpath命令的行为。

具体来说,发生的事情是我有一个名为“LLVM / llvm-2.9-build”的目录,但由于某种原因,尝试解析Makefile.config顶部的PROJECT_OBJ_ROOT会导致该目录实际上被调用“LLVM / LLVM-2.9-构建”。由于OSX默认情况下不区分大小写,因此除了随后LLVM_SRC_ROOT将设置为“LLVM / llvm-2.9-build”之外,这不会立即引起问题。这意味着使用patsubst创建PROJ_SRC_DIR来替换对象目录将导致不存在的路径(因为不匹配的情况意味着不会发生模式替换),而这反过来将被解析到/通过realpath。

将PROJ_SRC_DIR设置为/,这会导致Makefile.rules中的makefile复制规则确定源makefile位于$(PROJ_SRC_DIR)/ Makefile(即/ Makefile),并描述错误消息。

似乎只有Make(我的情况下为GNU Make 3.81)中的realpath内置实现具有此行为,因为强行使用Makefile.config顶部的realpath的宏版本来修复问题。但是,这不是一个好的长期修复,因为您必须手动修补每个LLVM makefile。

最后,我无法看到realpath从哪里得到小写的“llvm”,但是我觉得这可能是一个神器某种程度上从我引用的某个时间点缓存了这个名字该目录使用其小写名称。因此,我尝试进入该目录并将其转换为完全不同的名称,然后在进入并再次构建之前返回“LLVM”,这似乎解决了这个问题。

我希望对于遇到这种特殊怪异的任何人都有一些用处!

答案 4 :(得分:0)

这不是一个完整的答案,但你看到的是gmake没有找到它被告知要包含的Makefile,因此它正在尝试重新制作并失败,因为它无法找到它的配方。

但是,您发布的Makefile片段不会产生您看到的错误消息,因此我认为问题出在Makefile.common文件中。查找引用$(某些变量扩展)/ Makefile并从那里向后工作的include语句。您还可以尝试使用-d选项运行gmake,并根据输出进行处理。

答案 5 :(得分:0)

由于您的包含行显示为:

include $(LEVEL)/Makefile.common

令人费解的是,您没有收到有关/Makefile.common的错误消息。如果你是,那么我建议你可以在定义LEVEL之后留下一个尾随空白。

Makefile.common中是否有一行本身包含$(SOMEMACRO)/ Makefile而你没有设置SOMEMACRO的值?

答案 6 :(得分:0)

这是我对此问题的修正:(https://github.com/rust-lang/rust/issues/24887#issuecomment-99391849

在运行之前更新 src / llvm / Makefile.config.in ./configure

或在make之前更新 x86_64-apple-darwin / llvm / Makefile.config

第59行:

"Daniel Walrus"

更新到

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

第86行:

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

更新到

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