2010-03-10 82 views
7

我正在尝试构建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或对不上警告失败?

+1

我不认为任何调试选项导致将警告视为错误(至少不是我能找到的),是完整的输出? – 2010-03-10 03:15:04

回答

5

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

我不确定-gnatg的全部效果,虽然它肯定会导致警告被视为错误 - 就像构建编译器本身时的错误一样 - 无论如何,我想我记得在构建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 

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

这是一个交叉编译器,所以你不会(我希望!)需要在全部构建的所有三个阶段重复这一点。

+0

谢谢你,你的解决方案让我能够克服上述错误。我有更多来自Ada编译器的警告,但我现在就开始吧! – 2010-03-11 12:51:58

32

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

+1

OMG谢谢Dirk =) – Crasher 2014-06-03 03:06:00

3

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

4

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

环顾四周后,编译Ada代码时似乎有很多标志来控制警告。例如,-gnatwF根据this guide禁止在未引用的正式文件上发出警告。可能您需要的开关可以在那里提供的列表中找到。

+0

是的,他粘贴的内容都没有导致 - 错误被打开。它必须在摘录之前。 – 2010-03-10 03:49:38

+0

我知道它不是一个好主意,我试着构建一个旧版本的gcc/gnat(gcc-4.3.2),以便我可以构建AVR gcc/gnat(也是gcc-4.3.2),但是我也遇到同样的问题。在与项目所有者交谈之后,他告诉我,我的系统Ada编译器(gcc-4.3.4)对代码库“闻起来太新了”,我的选择是破解源代码或试图覆盖失败或警告。 – 2010-03-10 14:01:16

+0

嗯,我记得在短时间内与Ada打交道,对我来说,这种方法必须增加构建。正如我记得Ada对于事情是非常挑剔的。 – ezpz 2010-03-10 14:52:54

8

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

2

在gcc configure中你可以添加--disable-werror

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