Сделать / gcc загадочную ошибку 2: как получить больше информации? - PullRequest
7 голосов
/ 22 марта 2011

У меня есть проект 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 для каждого файла зависимостей, который должен быть включен (именно поэтому мы ставим - на первое место). Любое решение?

Ответы [ 2 ]

4 голосов
/ 19 апреля 2011

Хорошо, мое редактирование решило проблему: размещение тире - перед include скрывает сообщения об ошибках, возникающие при генерации зависимости.

Примечание для дальнейшего использования: не пытайтесь перехитрить Make.

1 голос
/ 22 марта 2011

Это специальный Makefile, возможно, с помощью какого-то инструмента, такого как CMake, который скрывает вывод компилятора, подобный следующему:

gcc -o a.out a.c 2>&1 > /dev/null

Если вы не знаете, что происходит, звучит как хорошая идея вернуться кполностью соберите систему, попробуйте начать заново.

...