2011-01-21 117 views
3

我試圖用一個非常簡單的makefile'製作'。我的makefile被命名爲'Makefile',所以我只是使用'make'命令。沒有規則來製作目標`/ Makefile','Makefile'需要'

我得到這個奇怪的錯誤:
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 

任何想法可以理解的:)

+2

發佈你的makefile(至少它的一部分),然後我們可以看到。 – maxelost 2011-01-21 20:21:08

+1

我的猜測是你在你的目標中有一個變量替換;但爲了讓人們提供真正的答案,你需要發佈有問題的Makefile。 – Lars 2011-01-21 20:22:36

回答

1

我找到了答案,排序:

問題在於LLVM的安裝過程。看起來,如果你以一種順序而不是另一種方式安裝,它可能導致這個錯誤。它對我來說沒有任何意義,但是在我正確安裝它之後,所有東西都編譯得很好(相同的代碼,相同的Makefile,相同的make程序)。

我真的不知道爲什麼會這樣,但我知道如何解決它:)

你想要做的是再次的./configure然後從基本目錄(相反的是使在網站上的說明中說明)。這對我有效。

順便說一句 - 我得到了相同的結果在Ubuntu上運行(具有相同的修復)。

0

這不是一個完整的答案,但是你看到的是gmake沒有找到它被包含的Makefile,因此它試圖重新制作並失敗,因爲它找不到它的配方。

但是,您發佈的Makefile代碼段不會生成您所看到的錯誤消息,所以我認爲問題出在Makefile.common文件中。尋找引用$(某些可變擴展)/ Makefile的include語句,並從那裏開始向後工作。您也可以嘗試使用-d選項運行gmake,並根據輸出進行處理。

1

我會走出去:你有額外的斜線。嘗試省略$(LEVEL)中的最後一個斜槓。

+0

由此產生的雙斜線無聲地塌陷,從而起作用,但Make中的字符串處理肯定會出錯。 Make是過期的過期日期 - 重要的空白FTL。 – ohmantics 2011-01-22 05:23:19

0

由於您有一行:

include $(LEVEL)/Makefile.common 

令人費解的是你沒有得到一個錯誤約/Makefile.common。如果你是,那麼我建議你可能在LEVEL定義之後有一個空白。

Makefile.common中是否存在一行,其中包含$(SOMEMACRO)/ Makefile,並且您尚未設置SOMEMACRO的值?

1

只是爲了在這裏添加一些信息(因爲這是在查找錯誤時在Google上出現的第一個命中) - 我遇到了同樣的問題,突然在OSX上的一個(以前工作)的LLVM設置上彈出,將其追溯到make中的realpath命令的行爲。

具體來說,發生的事情是我有一個名爲「LLVM/llvm-2.9-build」的目錄,但由於某種原因,試圖解析Makefile.config頂部的PROJECT_OBJ_ROOT會決定該目錄實際上是事實稱爲「llvm/llvm-2.9-build」。由於默認情況下OSX是不區分大小寫的,因此除了隨後將LLVM_SRC_ROOT設置爲「LLVM/llvm-2.9-build」之外,這不會引起即時問題。這意味着使用patsubst替換對象目錄的PROJ_SRC_DIR創建會導致一個不存在的路徑(因爲不匹配的情況意味着不會發生模式替換),而這又會通過實際路徑得到解決。

將PROJ_SRC_DIR設置爲/時,會導致Makefile.rules中的makefile複製規則判定源makefile位於$(PROJ_SRC_DIR)/ Makefile(即/ Makefile),並且描述了錯誤消息。

看起來,它只是內置的實現路徑Make(GNU Make 3.81在我的情況下)具有此行爲,強制使用從Makefile.config頂部的宏路徑的宏版本修復問題。但是,這不是一個很好的長期修復,因爲您必須手動修補每個LLVM makefiles。最後,我看不到實際路徑從哪裏得到小寫的「llvm」,但是認爲它可能是某種緩存名稱的工件,從某個時間點開始使用其小寫名稱引用該目錄。因此,我試着去那個目錄,然後把它變成一個完全不同的名字,然後在進入並重新構建之前回到「LLVM」,這似乎解決了這個問題。

我希望這對某些遇到這種特殊怪異的人有用處!

0

這裏是我修復此問題:(https://github.com/rust-lang/rust/issues/24887#issuecomment-99391849

更新的src/LLVM/Makefile.config.in運行./configure

或更新x86_64的,蘋果達爾文/ LLVM前/ Makefile文件。配置使

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)))