I make relies on having an independently callable C preprocessor that they make assumptions what the output from it look (which is not anything laid down by a standard or the like).    We used to use Imake extensively to build our code base, and tehre were platforms I had to bring along my own CPP because the one for the compiler didn’t work for the purpose (mostly issues with space and tab substitutions).    We eventually switched to CMAKE.