%.variables: %.tools %.subprojects
@ \
target=$(basename $(basename $*)); \
operation=$(subst .,,$(suffix $(basename $*))); \
type=$(subst -,_,$(subst .,,$(suffix $*))); \
echo Making $$operation for $$type $$target...; \
$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory --no-keep-going \
internal-$${type}-$$operation \
INTERNAL_$${type}_NAME=$$target \
TARGET=$$target \
_SUBPROJECTS="$($(basename $(basename $*))_SUBPROJECTS)" \
...
This rule matches all targets ending in .variables. First of
all, the rule depends on the corresponding %.tools and
%.subprojects rules. This is because before processing the
target itself, gnustep-make needs to process the related subprojects
and (only for frameworks) the framework tools. We ignore this
complication of subprojects and framework tools for now; if you look
at the %.subprojects and %.tools rules you see
that they do nothing if you are not actually using subprojects or
framework tools in your makefile.