【问题标题】:Makefile seemingly ignoring %.o wildcardMakefile 似乎忽略了 %.o 通配符
【发布时间】:2013-08-25 03:56:47
【问题描述】:

我目前正在尝试在 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 的第一次亲密体验,所以提前感谢您的耐心和帮助,如果我需要包含任何其他信息,请告诉我。

【问题讨论】:

    标签: compilation compiler-errors makefile


    【解决方案1】:

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

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

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

    【讨论】:

    • 你是对的——这是一个标题问题。感谢您对makepp 的指点;调试功能总是对这类事情有很大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2021-10-28
    • 2016-09-30
    • 2016-03-16
    • 2014-02-03
    • 2012-03-11
    相关资源
    最近更新 更多