我有以下 Makefile 来构建我的 erlang 项目:
.SUFFIXES: .erl .beam .yrl
ERL_SRC := $(wildcard src/*.erl)
ERL_OBJ := $(patsubst src/%.erl,ebin/%.beam,${ERL_SRC})
all: main
main: ${ERL_OBJ}
ebin/%.beam: src/%.erl
erlc +debug_info -W -o ebin $<
clean:
rm -fr ebin/*.beam
我正在尝试更新它以在 test/eunit 文件夹中构建我的 eunit 测试,并将输出转到与 src 相同的 ebin 文件夹,如下所示:
.SUFFIXES: .erl .beam .yrl
ERL_SRC := $(wildcard src/*.erl)
ERL_OBJ := $(patsubst src/%.erl,ebin/%.beam,${ERL_SRC})
EUNIT_SRC := $(wildcard test/eunit/*.erl)
EUNIT_OBJ := $(patsubst test/eunit/%.erl,ebin/%.beam,${EUNIT_SRC})
all: main
main: ${ERL_OBJ}
ebin/%.beam: src/%.erl test/eunit/%.erl
erlc +debug_info -W -o ebin $<
clean:
rm -fr ebin/*.beam
eunit: ${EUNIT_OBJ}
test: main eunit
使 main 工作正常,但如果我尝试 make test 它会失败:
make: *** No rule to make target `ebin/data_eunit.beam', needed by `eunit'. Stop.
测试模块 data_eunit.erl 位于 test/eunit 中。问题似乎出在 ebin/%.beam 目标上。如果我将 src/%.erl 与 test/eunit/%.erl 交换,那么我可以构建测试,但不能构建 src。如何从两个源文件夹进行构建并将输出转到一个输出文件夹?