Este é o meu 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
Eu posso correr make compile
várias vezes e obter
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile
./rebar get-deps compile
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
No entanto, por algum motivo, a execução make test
sempre dá
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make test
make: `test' is up to date.
mesmo se os arquivos não forem compilados. A questão é, por quê?
A execução do mesmo comando funciona diretamente:
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)
...
all
,test
eclear
são os seus nomes de destino makefiletest
paratest_rule
ou algo diferente.EDIT: Isso se aplica apenas a algumas versões do
make
- você deve verificar sua página de manual.Você também pode passar a
-B
bandeira paramake
. De acordo com a página de manual, isso faz:Isso
make -B test
resolveria seu problema se você estivesse em uma situação em que não deseja editarMakefile
ou alterar o nome da sua pasta de teste.fonte
-B
é o modo compatível com versões anteriores para mim ... (FreeBSD, OS / GNU Toolkit não parece ser determinada em questão)--always-make
para você?.PHONY
alvo parece meio embora portátil ... (Pelo menos para FreeBSD, não tenho certeza sobre coisas como Solaris)--always-make
opção para funcionar, seu makefile está quebrado.Isso acontece quando você tem um arquivo com o mesmo nome que o nome do destino Makefile no diretório em que o Makefile está presente.
fonte
meu erro foi com o nome de destino "filename.c:" em vez de apenas "filename:"
fonte