Makefile 'echo-n' ne fonctionne pas

j'essaie d'avoir mon texte de Makefile echo sans la ligne suivante, mais je n'y arrive pas. Je fais l'expérience du comportement sur OS X (sur Linux tout fonctionne comme prévu).

Makefile

a:
    @echo -n "hello"

b:
    @echo -n hello

c:
    @/bin/echo -n "hello"

Sortie:

$make a
-n hello
$make b
hello$make c
hello$

En d'autres termes, le make a est cassé. Ce qui se passe exactement? Est de faire de l'aide d'un echo? Clairement la présence des doubles citations change le comportement, mais pourquoi?

mise à Jour

tel que découvert par @chepner, en utilisant le chemin complet vers /bin/echo dans le makefile comprend le drapeau-n correctement.

24
demandé sur Chris 2012-07-26 21:49:49

3 réponses

quelque Chose à propos de la cite confond make. Votre code se comporte de la même pour moi, mais fonctionne comme prévu:

help:
        @echo -n Shouldn\'t print a newline

coder en dur le chemin vers l'exécutable fonctionne aussi:

help:
        @/bin/echo -n "Shouldn't print a newline"

Mac OS X page de manuel de echo, tout en discutant de l'existence de shell intégré echos, mentionne que le echosh(1) ne supporte pas le -n option, mais cela n'explique pas (à moi, en tout cas) pourquoi ma première alternative travail.


Confirmation que make utilise sh pour exécuter les commandes par défaut.

SHELL = bash
help:
        @echo -n "Shouldn't print a newline"
        @echo -n Shouldn\'t print a newline

les deux déclarations echo se comportent de la même manière (pas de nouvelles lignes imprimées). Donc, sans cette variable, nous avons bash semblant sh, mais en évaluant les deux lignes différemment. Question 1: Pourquoi? Question 2: est-ce que la deuxième ligne est native bash echo ou /bin/echo, plutôt que l'émulé sh