【发布时间】:2017-07-05 10:45:21
【问题描述】:
我正在学习 makefile,不能只解决我遇到的这个问题,我想了解它是如何/为什么会失败的。
src 目录中有六个 erlang 文件。我想将它们编译到ebin 目录中,而不必为它们中的每一个定义规则。根据 Gnu make 文档,pattern rules should be right up my alley。
但是,使用以下 makefile,我从 make 中得到的只是make: *** No targets. Stop。这是为什么?
ebin/%.beam: src/%.erl
mkdir -p ebin
erlc -o ebin $<
编辑:基于this answer,我现在明白我必须明确声明目标,例如使用make ebin/cmplx.beam。但是,我仍然不明白我应该如何编写我的 makefile 以获得我想要的行为 - 因为我有六个目标(在其他项目中甚至更多),这似乎是一个不必要的麻烦。有没有办法根据源文件名定义目标?
【问题讨论】:
-
Makefiles 是一种陈旧且太低级(意思是:太容易犯人为错误)的软件构建方式。对于 Erlang,如果你真的想坚持 Makefiles,那么我建议非常好的erlang.mk。如果你想考虑其他选项,那么rebar3.org。在 Erlang 之外,考虑 cmake.org,它将生成 Makefile 或(更好!)忍者配置。