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

Я пытаюсь построить gcc для использования с микроcontrollerом 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).

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

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

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

В gcc configure вы можете добавить --disable-werror .

Хотя желательно сначала найти правильный патч.

Как насчет включения «предупреждений прагмы (off,« … »)« в оскорбительные части вашего кода?

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