Недавно я изучаю GNU. Ниже приведен пример создания автоматической зависимости от руководства GNU make. Я знаю общий смысл вышеупомянутого скрипта (он в основном заменяет что-то другим с помощью команды sed
). Но у меня есть два вопроса относительно деталей в команде. Во-первых, что означает \1.o
в команде? Связано ли это с параметром позиции? И во-вторых, почему $*
помещается в пару ()
, так как $*
сам уже означает стебель целевого имени файла? (Я пытался без скобок, это не сработало.)GNU make auto dependency generation
%.d: %.c
$(CC) -M $(CPPFLAGS) $< > [email protected]$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected]; \
rm -f [email protected]$$$$
Я попытался следующие, это не сработало.
%.d: %.c
$(CC) -M $(CPPFLAGS) $< > [email protected]$$$$; \
sed 's,$*\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected]; \
rm -f [email protected]$$$$
Может ли кто-нибудь объяснить причины? Благодарю.
Это оба детали 'sed', а не детали makefile. Это команда 'sed', на которую вы смотрите. –
$ * - автоматическая переменная в make-файле. @EtanReisner – Jerry
Вы пытались '' s, $ * \. O [:] *, $ *. O $ @:, g''? – 5gon12eder