Makefile では、$ は $(HEADERS) などの make 変数に使用されます。ここで、HEADERS は以前に = を使用して定義されていました。
インライン bash で $ を使用するには、それらを二重にしてエスケープする必要があります。$$VAR はシェル変数を参照し、.c$$ などは、使用している正規表現の $ をエスケープする必要があります。
以下は、達成しようとしているものの $ をエスケープするのに十分なはずです
bash -c "find . |grep -E '\.c$$|\.h$$|\.cpp$$|\.hpp$$|Makefile' | xargs cat | wc -l"
さらに、次の宣言を追加すると、デフォルトの /bin/sh ではなく、Makefile で bash をグローバルに使用できます。
SHELL = /bin/bash
上記により、bash -c と引用符を必要とせずに find コマンドを使用できるはずです。SHELL が上記のように定義されている場合、次のように動作するはずです。
find . |grep -E '\.c$$|\.h$$|\.cpp$$|\.hpp$$|Makefile' | xargs cat | wc -l
また、この目的で SubShell が使用されることもよくあります。これらは () で作成されます。これにより、内部シェルによって定義されたすべての変数が、そのシェルとそのコマンド グループに対してローカルになります。