Voici mon 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
Je peux courir make compile
plusieurs fois et obtenir
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile
./rebar get-deps compile
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Cependant, pour une raison quelconque, la course make test
donne toujours
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make test
make: `test' is up to date.
même si les fichiers ne sont pas compilés. La question est, pourquoi?
L'exécution de la même commande fonctionne directement:
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
etclear
sont vos noms cibles makefiletest
pourtest_rule
ou quelque chose de différent.EDIT: Cela ne s'applique qu'à certaines versions de
make
- vous devriez vérifier votre page de manuel.Vous pouvez également passer le
-B
drapeau àmake
. Selon la page de manuel, cela fait:Cela
make -B test
résoudrait donc votre problème si vous vous trouviez dans une situation où vous ne souhaitez pas modifierMakefile
ou modifier le nom de votre dossier de test.la source
-B
est un mode rétrocompatible pour moi ... (FreeBSD, la boîte à outils OS / GNU ne semble pas être spécifiée en question)--always-make
marche pour vous?.PHONY
cible semble plutôt portable ... (au moins pour FreeBSD, pas sûr de choses comme Solaris)--always-make
option pour fonctionner, votre makefile est cassé.Cela se produit lorsque vous avez un fichier portant le même nom que le nom cible Makefile dans le répertoire où le Makefile est présent.
la source
mon erreur était de faire le nom cible "filename.c:" au lieu de simplement "filename:"
la source