gcc, сделай:как отключить предупреждение о сбое?
Вопрос
Я пытаюсь собрать gcc для использования с микроконтроллером AVR и avr-ada, но столкнулся с препятствием, вызванным тем, что мой обычный компилятор слишком требователен к версии, которая мне нужна для AVR.Я получаю следующее предупреждение, которое, в свою очередь, приводит к тому, что gcc или make сообщает об ошибке:
gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada
-I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2
Есть ли способ проинструктировать gcc или сделать так, чтобы предупреждения не выходили из строя?
Решение
Триггером здесь является -gnatpg (на самом деле -gnatg):это «режим реализации GNAT (используется для компиляции модулей GNAT)».-gnatp означает «подавить все проверки».
Я не уверен в полном эффекте -gnatg, хотя он, безусловно, приводит к тому, что предупреждения рассматриваются как ошибки - например -Werror - во всяком случае при сборке самого компилятора;Кажется, я помню, что видел несмертельные предупреждения при создании RTS.
Одной из возможностей было бы вручную скомпилировать только exp_ch5.adb без -gnatg;команда, которую вы указываете, была введена в gcc/, поэтому
$ cd gcc
$ gcc -c -g -O2 -gnatp -gnata -nostdinc -I- -I. -Iada -I../../gcc/ada \
../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
Затем вернитесь на один уровень и снова «сделайте».
Это кросс-компилятор, поэтому вам не придется (надеюсь!) повторять это для всех трех этапов полной сборки.
Другие советы
Пытаться make -k
вместо того, чтобы просто make
.Это будет «продолжаться», а не останавливаться.
В качестве альтернативы погружению в систему сборки попробуйте установить -Wno-error
в CFLAGS, что вы сможете сделать в среде (или во время настройки, если используете систему сборки GNU).
Кажется, в Makefile установлен флаг -Werror.Возможно, вы можете поискать параметры CFLAGS в Makefile и удалить флаг -Werror.Флаг Werror превратит все предупреждения в ошибки.
В общем, игнорировать предупреждения компилятора — не лучшая идея.Однако, если это часть более крупного процесса сборки, скорее всего, -Werror
флаг, вставленный ранее в последовательность.Начните с поиска этого.
Если осмотреться, можно увидеть множество флагов для управления предупреждениями при компиляции кода Ada.Например, -gnatwF
воля Подавить предупреждения о формальностях, на которые нет ссылок в соответствии с это руководство.Возможно, нужный вам переключатель можно найти в приведенном там списке.
В настройке gcc вы можете добавить --disable-werror
.
Хотя желательно сначала найти подходящий патч.
Как насчет того, чтобы поместить «прагматические предупреждения(off, «...»)» в проблемные части вашего кода?