I am trying to have my Makefile echo text without the trailing new line, but am unable to. I am experiencing the behavior on OS X (on Linux everything works as expected).
The problem comes from the unfortunate interaction of two facts.
First, make has two modes of operations depending on the complexity of the recipe to be run:
make will directly run the recipe with its builtin commands. This is what happens in your b case.make will spawn a shell to interpret and run the recipe. This is what happens in your a case.Second, make uses /bin/sh as a shell but the functionality of /bin/sh is implemented differently on Mac OS X and Linux:
/bin/sh is implemented by bash. Also on Mac OS X, bash is compiled with --enable-strict-posix-default. One consequence of this flag is that the echo command does not understand the -n flag./bin/sh is implemented by dash which is less strict with respect to POSIX specification. Therefore the flag -n is implemented in the echo command.BTW, the Makefile buitlin echo command understands the -n flag which explains why the b case always works.
The clean and portable way of fixing your problem is to replace your @echo -n recipes with @printf recipes.