Encontro o seguinte sed
comando no manualmake
do .
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g'
E tem o seguinte efeito (este é um exemplo no manual):
main.o : main.c defs.h
# is turned into:
main.o main.d : main.c defs.h
No meu entendimento, '\($*\)\.o'
pretende-se corresponder ao nome do arquivo filename.o
, mas não entendo como '\($*\)'
conseguir isso. Eu sei $
que é especial no final de linha em uma expressão regular, mas isso não se aplica aqui.
Então, o que significa '\($*\)'
aqui?
O código completo:
%.d: %.c
@set -e; rm -f $@; \
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$