gcc, сделай:как отключить предупреждение о сбое?

StackOverflow https://stackoverflow.com/questions/2414242

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь собрать 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, «...»)» в проблемные части вашего кода?

Видеть http://www.adacore.com/2007/11/19/ada-gem-18/.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top