Que fait cette séquence @: $(MAKE) ; $(unstage) dans le makefile de GCC ?
Par ailleurs, on trouve dans le Makefile :
Code:
1 2 3 4
| unstage = :
(snip)
unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage\
_last`-start || exit 1; else :; fi |
La variable MAKE n'est pas redéfinie.
Il y a bien l'explication :
Code:
1 2 3 4
| # (snip) To avoid excessive
# recursive invocations of make, we "inline" them using a variable. These
# must be referenced as ": $(MAKE) ; $(unstage)" rather than "$(unstage)"
# to avoid warnings from the GNU Make job server. |
Mais je ne la comprends pas... :calim2:
Pouvez-vous m'aider s'il vous plaît ?
Ajout : on trouve cette ligne dans la recette de la cible "all" par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
# The target built for a native non-bootstrap build.
.PHONY: all
all:
[ -f stage_final ] || echo stage3 > stage_final
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
if [ -f stage_last ]; then \
TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_l\
ast)_TFLAGS)"; \
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
else \
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
; \
fi \
&& : |
Par ailleurs, je n'avais pas réalisé que l'effet de la commande ":" du shell ne va pas au-delà du séparateur de commandes ";". Ma question porte en fait surtout sur la séquence ": $(MAKE)" qui normalement ne fait rien...