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