У меня есть простой скрипт (depends.sh
), который генерирует файл зависимостей и внес некоторые изменения из файла зависимостей.`make зависит от магии в gnu make?
#!/bin/sh
#echo "## Got: $*"
CC="$1"
DIR="$2"
shift 2
case "$DIR" in
"" | ".")
$CC -MM -MG "[email protected]" | sed -e '[email protected]^\(.*\)\.o:@\1.d \1.o:@'
;;
*)
$CC -MM -MG "[email protected]" | sed -e "[email protected]^\(.*\)\.o:@$DIR/\1.d $DIR/\1.o:@"
;;
esac
Сценарий вызывается из Makefile, это отрывок из него.
DEP := $(OBJ:.o=.d)
# implicit rules
%.d: %.c
./depends.sh $(CC) `dirname $*.c` $(CFLAGS) $*.c > [email protected]
-include $(DEP)
# Actual targets
depend: $(DEP)
Что интересно, что make depends
выполняет следующие действия:
./depends.sh gcc `dirname src/hellomake.c` -Wall -Wno-unused-function -g -O -Isrc src/hellomake.c > src/hellomake.d
./depends.sh gcc `dirname src/hellofunc.c` -Wall -Wno-unused-function -g -O -Isrc src/hellofunc.c > src/hellofunc.d
cat depends.sh >depends
chmod a+x depends
Там нет depends
цели (только depend
цели), но она выполняет зависит цель и даже создает зависит сценарий, и сделать его исполняемым.
Что это за магия?