如何在使用GCC和Make时禁用失败警告?

lf5gs5x2  于 2022-11-12  发布在  其他
关注(0)|答案(7)|浏览(227)

我正在尝试构建用于AVR微控制器和avr-ada的GCC,但遇到了一个障碍,原因是我的常规编译器对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在出现警告时不失败?

khbbv19g

khbbv19g1#

尝试make -k而不是make。这将“继续”而不是停止。

ppcbkaq5

ppcbkaq52#

作为深入构建系统的替代方法,尝试在CFLAGS中设置-Wno-error,您应该能够通过环境(或者如果使用GNU构建系统,则在配置时)完成此操作。

pcww981p

pcww981p3#

这里的触发器是-gnatpg(实际上是-gnatg):这是“GNAT实现模式(用于编译GNAT单元)"。-Gnatp表示“抑制所有检查”。
我不确定-Gnatg的全部效果,尽管它肯定会导致警告被视为错误--比如-Weror--无论如何,在编译器本身的构建过程中;我想我记得在建造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

然后再往上退一级,再“使”一次。
这是一个交叉编译器,所以你不会(我希望!)需要在一个完整构建的所有三个阶段都重复这个过程。

sdnqo3pr

sdnqo3pr4#

似乎在Makefile中设置了-Werror标志。也许您可以在Makefile中查找CFLAGS选项并删除-Werror标志。Werror标志将使所有警告变为错误。

uemypmqf

uemypmqf5#

一般来说,忽略编译器的警告并不是一个好主意。但是,如果这是一个更大的make进程的一部分,那么很可能在序列的前面插入了一个-Werror标志。首先要查找这个标志。
环顾四周,似乎有大量的标志来控制编译Ada代码时的警告。例如,根据本指南,-gnatwFSuppress warning on unreferenced formals。可能您需要的开关可以在此处提供的列表中找到。

mbyulnm0

mbyulnm06#

在gcc配置中,您可以添加--disable-werror
不过,最好先找一个合适的补丁。

tyg4sfes

tyg4sfes7#

将“pragma warnings(off,“...”)”放入代码的违规部分。
请参阅http://www.adacore.com/2007/11/19/ada-gem-18/

相关问题