Makefile似乎忽略了%.o通配符

时间:2013-08-25 03:56:48

标签: compilation compiler-errors makefile

我目前正在尝试编写Snow Leopard上的Julia语言解释器 - 它一直给我一点时间,但我认为我差点把它弄下来。

最新的障碍是以下错误:

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

makefile的相关部分如下所示:

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 $@
%.do: %.c $(HEADERS)
    @$(PRINT_CC) $(CC) $(CPPFLAGS) $(CFLAGS) $(DEBUGFLAGS) -c $< -o $@
%.o: %.cpp $(HEADERS)
    @$(PRINT_CC) $(CXX) $(call exec,$(LLVM_CONFIG) --cxxflags) $(CPPFLAGS) $(CXXFLAGS) $(SHIPFLAGS) -c $< -o $@
%.do: %.cpp $(HEADERS)
    @$(PRINT_CC) $(CXX) $(call exec,$(LLVM_CONFIG) --cxxflags) $(CPPFLAGS) $(CXXFLAGS) $(DEBUGFLAGS) -c $< -o $@
...
$(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 $@ $(LDFLAGS) $(LIBS) $(SONAME)
$(INSTALL_NAME_CMD)libjulia-release.$(SHLIB_EXT) $@

一切似乎都恰到好处。据我了解,在查找jltypes.o规则时,Make应使用%.o规则;但是,显然它根本找不到规则。

让我疯狂的是它在Lion上编译得很好。我比较了makefile,它们的包含和Make程序本身,但无济于事。这是我与makefile的第一次亲密体验,所以请提前感谢您的耐心和帮助,如果我需要包含任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

没有%.o规则。有%.o: %.c $(HEADERS)(及其伴随cpp)规则。这意味着如果可以找到jltypes.ojltypes.c ,它可以使用它来构建$(HEADERS) 。由于源文件可能存在于两个系统上,我认为标题列表的计算方式不同(错误)。

请注意,makepp的cvs版本刚刚获得了一个新的选项变量MAKEPP_DEBUG,这使得它可以写出有关这些内容的详细信息。它们可以通过实用程序makepplog查看。

makepp还有很多。除了做几乎所有GNU make之外,还有更多有用的东西,你甚至可以通过一些Perl编程扩展你的makefile。