Posix limits macro names to nonempty strings containing only ASCII letters and digits, ‘.’, and ‘_’. Many make implementations allow a wider variety of characters, but portable makefiles should avoid them. It is portable to start a name with a special character, e.g., ‘$(.FOO)’.
Some ancient make implementations don't support leading underscores in macro names. An example is NEWS-OS 4.2R.
$ cat Makefile _am_include = # _am_quote = all:; @echo this is test $ make Make: Must be a separator on rules line 2. Stop. $ cat Makefile2 am_include = # am_quote = all:; @echo this is test $ make -f Makefile2 this is test
However, this problem is no longer of practical concern.