2013-08-25 62 views
0

我目前正試圖編譯Snow Leopard上的Julia語言解釋器 - 它給了我一段時間,但我認爲我幾乎已經把它解決了。Makefile似乎忽略了%.o通配符

最新的障礙已被以下錯誤:

make: *** No rule to make target `jltypes.o', needed by `/Users/arman/julia/usr/lib/libjulia-release.dylib'. Stop. 

生成文件的相關部分似乎是以下幾點:

SRCS = \ 
jltypes gf ast builtins module codegen interpreter \ 
alloc dlload sys init task array dump toplevel jl_uv jlapi profile 
... 
OBJS = $(SRCS:%=%.o) 
... 
%.o: %.c $(HEADERS) 
    @$(PRINT_CC) $(CC) $(CPPFLAGS) $(CFLAGS) $(SHIPFLAGS) -DNDEBUG -c $< -o [email protected] 
%.do: %.c $(HEADERS) 
    @$(PRINT_CC) $(CC) $(CPPFLAGS) $(CFLAGS) $(DEBUGFLAGS) -c $< -o [email protected] 
%.o: %.cpp $(HEADERS) 
    @$(PRINT_CC) $(CXX) $(call exec,$(LLVM_CONFIG) --cxxflags) $(CPPFLAGS) $(CXXFLAGS) $(SHIPFLAGS) -c $< -o [email protected] 
%.do: %.cpp $(HEADERS) 
    @$(PRINT_CC) $(CXX) $(call exec,$(LLVM_CONFIG) --cxxflags) $(CPPFLAGS) $(CXXFLAGS) $(DEBUGFLAGS) -c $< -o [email protected] 
... 
$(BUILD)/$(JL_LIBDIR)/libjulia-release.$(SHLIB_EXT): julia.expmap $(OBJS) flisp/libflisp.a support/libsupport.a $(LIBUV) 
@$(PRINT_LINK) $(CXX) $(SHIPFLAGS) $(OBJS) $(RPATH_ORIGIN) -shared -o [email protected] $(LDFLAGS) $(LIBS) $(SONAME) 
$(INSTALL_NAME_CMD)libjulia-release.$(SHLIB_EXT) [email protected] 

一切似乎都在地方要適當。據我瞭解,當尋找jltypes.o的規則時,Make應該使用%.o規則;然而,顯然它根本找不到規則。

讓我發瘋的是它在Lion上編譯得很好。我已經比較了makefiles,它們的包含和Make程序本身,但無濟於事。這是我第一次使用makefile進行親密體驗,所以請提前感謝您的耐心和幫助,並讓我知道是否需要包含任何其他信息。

回答

2

沒有%.o規則。有一個%.o: %.c $(HEADERS)(和它的同伴cpp)規則。這意味着如果可以找到那些,可以使用它來構建jltypes.o,從jltypes.c$(HEADERS)。由於源文件可能在兩個系統上都存在,因此我會假設頭文件列表的計算方式不同(錯誤地)。

請注意,cvs版本makepp剛剛獲得了一個新的選項變量MAKEPP_DEBUG,這導致它編寫關於這些事情的詳細信息。它們可以通過實用程序makepplog查看。

makepp還有很多。除了幾乎所有的GNU make功能之外,還有更多有用的東西,甚至可以用一些Perl編程擴展makefile。

+0

你是對的 - 這是一個頭問題。感謝關於'makepp'的指針;調試功能對於這類事情總是很有幫助。 – Arman