Я пытаюсь создать gcc для использования с AVR микро контроллер и avr-ada, и я поразил контрольно-пропускной пункт, вызванный моим обычным компилятором, являющимся слишком требовательным в отношении версии, в которой я нуждался для AVR. Я получаю соблюдающее предупреждение, которое в свою очередь вызывает gcc, или сделайте для создания отчетов об ошибке:
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".
Это кросс-компилятор, поэтому вам не придется (я надеюсь!) повторять это для всех трех этапов полной сборки.
Попробуйте make -k
вместо make
. Это будет «продолжаться», а не останавливаться.
В качестве альтернативы погружению в систему сборки попробуйте установить -Wno-error
в CFLAGS, что вы сможете сделать через среду (или во время настройки, если вы используете систему сборки GNU ).
В общем случае игнорировать предупреждения компилятора - не лучшая идея. Однако, если это часть более крупного процесса make, вероятно, ранее в последовательности был вставлен флаг -Werror
. Начните с поиска этого.
После осмотра, кажется, есть множество флагов для управления предупреждениями при компиляции кода Ada. Например, -gnatwF
будет подавлять предупреждения в формальных файлах без ссылок в соответствии с этого руководства . Возможно, нужный вам переключатель можно найти в приведенном там списке.
Похоже, в Makefile установлен флаг -Werror. Возможно, вы можете найти параметры CFLAGS в Makefile и удалить флаг -Werror. Флаг Werror превратит все предупреждения в ошибки.
Как насчет того, чтобы поместить «предупреждения прагмы (выкл.,« ... »)» в некорректные части вашего кода?