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.
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é echo
s, mentionne que le echo
sh(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