web-dev-qa-db-fra.com

Pourquoi fait-on penser que la cible est à jour?

C'est 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 obtenez

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, en cours d'exécution 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)
...
183
Alexey Romanov

Peut-être avez-vous un fichier/répertoire nommé test dans le répertoire. Si ce répertoire existe et ne contient pas de dépendances plus récentes, cette cible n'est pas reconstruite.

Pour forcer la reconstruction sur ce type de cibles non liées à un fichier, vous devez les rendre fausses comme suit:

.PHONY: all test clean

Notez que vous pouvez y déclarer toutes vos cibles factices.

384
Didier Trosset

EDIT: Ceci 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, ceci:

-B, --always-make Faire inconditionnellement toutes les cibles.

Alors make -B test résoudrait votre problème si vous ne vouliez pas éditer le Makefile ou changer le nom de votre dossier de test.

23
jamesc