gcc, make: как отключить сбой при предупреждении? - PullRequest
10 голосов
/ 10 марта 2010

Я пытаюсь собрать 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 или make, чтобы они не ошибались в предупреждениях?

Ответы [ 7 ]

40 голосов
/ 10 марта 2010

Попробуйте make -k вместо make. Это будет «продолжаться», а не останавливаться.

11 голосов
/ 10 марта 2010

В качестве альтернативы погружению в систему сборки попробуйте установить -Wno-error в CFLAGS, что вы должны делать в среде (или во время настройки, если используете систему сборки GNU).

5 голосов
/ 11 марта 2010

Триггером здесь является -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

Затем вернитесь на один уровень и снова «сделайте».

Это кросс-компилятор, поэтому вам не нужно (я надеюсь!) Повторять это для всех трех этапов полной сборки.

4 голосов
/ 10 марта 2010

В общем случае не стоит игнорировать предупреждения вашего компилятора. Однако, если это часть более крупного процесса сборки, скорее всего, в последовательность будет вставлен флаг -Werror. Начните с поиска этого.

После осмотра, кажется, есть множество флагов для контроля предупреждений при компиляции кода Ada. Например, -gnatwF будет Подавлять предупреждения на формальностях без ссылок в соответствии с этим руководством . Возможно, нужный вам переключатель находится в приведенном там списке.

3 голосов
/ 10 марта 2010

Похоже, в Makefile установлен флаг ошибки. Возможно, вы можете найти опции CFLAGS в Makefile и удалить флаг -Werror. Флаг Werror превратит все предупреждения в ошибки.

2 голосов
/ 09 мая 2013

В конфигурации gcc вы можете добавить --disable-werror.

Хотя желательно сначала найти подходящий патч.

0 голосов
/ 11 марта 2010

Как насчет размещения "прагматических предупреждений (выкл." ... ")" в оскорбительных частях вашего кода?

См. http://www.adacore.com/2007/11/19/ada-gem-18/.

...