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é 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