14

我正在尝试构建用于 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 或使警告不会失败?

4

7 回答 7

48

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

于 2010-03-10T03:13:36.857 回答
13

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

于 2010-03-10T05:51:15.980 回答
7

这里的触发器是-gnatpg(实际上是-gnatg):这是“GNAT 实现模式(用于编译GNAT 单元)”。-gnatp 的意思是“禁止所有检查”。

我不确定 -gnatg 的全部效果,尽管它肯定会导致警告被视为错误——比如 -Werror——无论如何在构建编译器本身时;我想我记得在构建 RTS 时看到了非致命警告。

一种可能性是在没有 -gnatg 的情况下手动编译 exp_ch5.adb;您列出的命令是在 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

然后备份一个级别,并再次“制作”。

这是一个交叉编译器,因此您不需要(我希望!)在完整构建的所有三个阶段重复此操作。

于 2010-03-10T21:10:34.190 回答
4

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

于 2010-03-10T03:20:10.340 回答
3

一般来说,忽略来自编译器的警告并不是一个好主意。但是,如果这是更大的制作过程的一部分,则可能-Werror在序列中较早插入了一个标志。从寻找它开始。

环顾四周,在编译 Ada 代码时似乎有大量的标志来控制警告。例如,-gnatwF将根据本指南抑制未引用形式的警告。您可能需要的开关可以在此处提供的列表中找到。

于 2010-03-10T03:22:19.690 回答
1

在 gcc 配置中,您可以添加--disable-werror.

虽然建议先寻找合适的补丁。

于 2013-05-09T16:49:30.700 回答
0

将“pragma warnings(off, "...")" 放入代码的违规部分怎么样?

请参阅http://www.adacore.com/2007/11/19/ada-gem-18/

于 2010-03-11T14:40:43.183 回答