I must admit that I don't understand why but obviously it is necessary to place .PHONY below the definition of variables it refers to - although those variables are recursively expanded ones! Not doing so made libsrc/Makefile build only three target libraries.
   CMD_EXE = 1
 endif
 
-.PHONY: all mostlyclean clean install lib $(TARGETS)
-
-.SUFFIXES:
-
 CBMS = c128   \
        c16    \
        c64    \
            ser \
            tgi
 
+.PHONY: all mostlyclean clean install lib $(TARGETS)
+
+.SUFFIXES:
+
 ifdef CMD_EXE
   DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir))))
   MKDIR = mkdir $(subst /,\,$1)
 
   CMD_EXE = 1
 endif
 
-.PHONY: all mostlyclean clean install avail unavail bin $(PROGS)
-
-.SUFFIXES:
-
 PROGS = ar65  \
         ca65  \
         cc65  \
         sim65 \
         sp65
 
+.PHONY: all mostlyclean clean install avail unavail bin $(PROGS)
+
+.SUFFIXES:
+
 bindir  := $(prefix)/bin
 datadir := $(if $(prefix),$(prefix)/share/cc65,$(abspath ..))