У меня есть проект C ++, который компилируется с использованием Makefile, и иногда, когда ( мои предположения ) отсутствуют некоторые включения, я получаю загадочное сообщение об ошибке 2, и процесс make останавливается.
Я подозреваю, что пропущенные включают, потому что это в третий раз, когда я включал несуществующий заголовочный файл.
Это выглядит так:
---- Build tmp/foo.o ----
---- Build tmp/bar.o ----
---- Build tmp/toto.o ----
---- Build tmp/tata.o ----
make: *** [build_Project] Error 2
Это сводит меня с ума, потому что даже при использовании подробных команд (где отображается каждый вызов g ++) я ничего не вижу.
Я ожидал, что парень выдаст несколько ошибочных сообщений, таких как " не может найти заголовок X " или " неопределенная ссылка на Y ", но ничего нет.
Мои параметры компиляции для gcc: -O0 -Wall -Werror -Wno-write-strings -fno-rtti -fno-exceptions
, если это поможет.
Ах, и мы используем трюк Makefile с включением зависимостей:
ifneq ($(strip $(DEPENDS)),)
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPENDS)
endif
endif
(см. здесь и здесь для получения дополнительной информации)
Хотя это документированные вещи, я подозреваю, что моя проблема как-то связана с включением этих зависимостей.
Если вы уже наткнулись на этот вопрос, не стесняйтесь комментировать это ...
Заранее спасибо.
редактирование:
Хорошо, после небольшой игры, подавление -
перед -include $(DEPENDS)
дает мне больше информации (make-файл останавливает на отсутствующем включенном файле).
make[1]: *** No rule to make target « foo.h », necessary for « tmp/bar.d ». Stop.
Теперь недостатком является то, что когда я запускаю make
в первый раз, я получаю сообщение missing bar.d file
для каждого файла зависимостей, который должен быть включен (именно поэтому мы ставим -
на первое место).
Любое решение?