Это мой 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
Я могу запустить make compile
несколько раз и получить
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile
./rebar get-deps compile
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Однако по какой-то причине бег make test
всегда дает
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make test
make: `test' is up to date.
даже если файлы не скомпилированы. Вопрос в том, почему?
Выполнение этой же команды напрямую работает:
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
иclear
ваши целевые имена Makefiletest
наtest_rule
или что-то другое.РЕДАКТИРОВАТЬ: Это относится только к некоторым версиям
make
- вы должны проверить свою справочную страницу.Вы также можете передать
-B
флагmake
. Согласно man-странице, это делает:Так
make -B test
бы решить вашу проблему , если вы были в ситуации , когда вы не хотите , чтобы отредактироватьMakefile
или изменить имя папки тестирования.источник
-B
для меня это режим обратной совместимости ... (Набор инструментов FreeBSD, OS / GNU, кажется, не указан в вопросе)--always-make
тебя работает?.PHONY
Цель кажется вид портативного , хотя ... (По крайней мере , на FreeBSD, не уверен , о том , как Solaris)--always-make
опция, ваш make-файл не работает.Это происходит, когда у вас есть файл с тем же именем, что и имя цели Makefile, в каталоге, где находится Makefile.
источник
моя ошибка заключалась в создании целевого имени «filename.c:» вместо просто «filename:»
источник