Объяснение циклической зависимости в make

#makefile #circular-dependency

#makefile #циклическая зависимость

Вопрос:

Make думает, что у меня циклическая зависимость:

 $ make blah > /dev/null
make[1]: Circular all <- all dependency dropped.
  

Есть ли способ заставить make распечатать путь, по которому он является циклическим? Это очень большой и сложный Makefile, который я не писал, и я нахожу его почти бесполезным разбираться вручную.

Есть ли у людей какие-либо другие технологии для разрешения циклических зависимостей?

Спасибо.

Ответ №1:

 make[1]: Circular all <- all
  

Хорошо, две вещи:

1) all <- all означает, что это весь путь. Это верно, all является обязательным условием all .

2) make[1] означает, что это рекурсивный Make. Где-то в вашем makefile есть команда $(MAKE) all (вероятно, скрытая именами переменных, функциями, аргументами, чем угодно).

Помогает ли это?

Комментарии:

1. О, вау, с ума сойти, спасибо! В этом гораздо больше смысла. Я боюсь, что рекурсивный make будет находиться в сгенерированном Makefile, который будет невозможно прочитать, но это чертовски упростит поиск. Еще раз спасибо.