POSIX Make allows the syntax $(@D) and $(@F) to be used to retrieve the directory and filename parts of the $@ internal macro. It also allows this syntax for the other four internal macros ($%, $?, $<, and $*).
Automake seems to be aware of $(@D) and $(@F), but not the others. Here is an example: $ nl configure.ac 1 AC_INIT([example], [1]) 2 AM_INIT_AUTOMAKE([-Wall foreign]) 3 AC_CONFIG_FILES([Makefile]) 4 AC_OUTPUT $ nl Makefile.am 1 foo.a(foo.o): foo.o 2 echo $(@D) # no warning 3 echo $(@F) # no warning 4 echo $(%D) # warning 5 echo $(%F) # warning 6 echo $(?D) # warning 7 echo $(?F) # warning 8 echo $(<D) # warning 9 echo $(<F) # warning 10 echo $(*D) # warning 11 echo $(*F) # warning $ autoreconf -i Makefile.am:4: warning: %D: non-POSIX variable name Makefile.am:5: warning: %F: non-POSIX variable name Makefile.am:6: warning: ?D: non-POSIX variable name Makefile.am:7: warning: ?F: non-POSIX variable name Makefile.am:8: warning: <D: non-POSIX variable name Makefile.am:9: warning: <F: non-POSIX variable name Makefile.am:10: warning: *D: non-POSIX variable name Makefile.am:11: warning: *F: non-POSIX variable name $ autoconf --version | head -n 1 autoconf (GNU Autoconf) 2.71 $ automake --version | head -n 1 automake (GNU automake) 1.16.5