这是我的Makefile:
REBAR=./rebar
REBAR_COMPILE=$(REBAR) get-deps compile
all: compile
compile:
$(REBAR_COMPILE)
test:
$(REBAR_COMPILE) skip_deps=true eunit
clean:
-rm -rf deps ebin priv doc/*
docs:
$(REBAR_COMPILE) doc
ifeq ($(wildcard dialyzer/sqlite3.plt),)
static:
$(REBAR_COMPILE) build_plt analyze
else
static:
$(REBAR_COMPILE) analyze
endif
Run Code Online (Sandbox Code Playgroud)
我可以make compile多次运行并获得
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile
./rebar get-deps compile
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,跑步make test总是给出
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make test
make: `test' is up to date.
Run Code Online (Sandbox Code Playgroud)
即使文件没有编译.问题是,为什么?
直接运行相同的命令:
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ ./rebar get-deps compile skip_deps=true eunit
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Compiled src/sqlite3_lib.erl
Compiled src/sqlite3.erl
==> erlang-sqlite (eunit)
...
Run Code Online (Sandbox Code Playgroud)
Did*_*set 409
也许你有一个test在目录中命名的文件/ 目录.如果此目录存在,并且没有更新的依赖项,则不会重建此目标.
要强制在这些与文件无关的目标上进行重建,您应该按照以下方式使它们变为虚假:
.PHONY: all test clean
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在那里声明所有虚假目标.
jam*_*esc 26
编辑:这仅适用于某些版本make- 您应该检查您的手册页.
你也可以将-B旗帜传递给make.根据手册页,这样做:
-B, --always-make无条件地制定所有目标.
因此make -B test,如果您处于不想编辑Makefile或更改测试文件夹名称的情况,则可以解决您的问题.