当使用GCC和Make时,我该如何禁用警告失败?

17

我试图为使用 AVR 微控制器和 avr-ada构建GCC,在此过程中,我的常规编译器对所需版本过于挑剔,导致我遇到了障碍。 我收到以下警告,这进而导致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在出现警告时不会失败?


1
我认为在调试选项中没有任何一项会将警告视为错误(至少我找不到),这就是完整的输出吗? - Tim Post
通常情况下(当不使用-gnatg应用编译器构建所需的所有检查时),GNAT(GCC中的Ada)使用-gnatwe将警告视为错误,并使用-gnatwn取消该操作。 - Simon Wright
7个回答

53

尝试使用make -k而不是仅仅的make。这样可以使程序在错误发生时“继续”执行。


15

作为跳过构建系统的替代方案,尝试在CFLAGS中设置-Wno-error,你应该可以通过环境变量来实现(或者如果使用GNU构建系统,在配置时设置)。


7
触发器在于-gnatpg(实际上是-gnatg):这是“GNAT实现模式(用于编译GNAT单元)”。-gnatp意味着“抑制所有检查”。
我不确定-gnatg的完整影响,不过至少在构建编译器本身时会导致警告被视为错误——类似于-Werror;我记得在构建运行时系统时看到过非致命警告。
一个可能的解决方案是手动编译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'命令。

这是一个交叉编译器,所以你不需要为完整构建的三个阶段重复此过程(希望如此!)。


谢谢,您的解决方案让我成功地解决了上面的错误。虽然我现在还有更多来自Ada编译器的警告,但我会继续前进! - Dr. Watson
"RTS"是什么?运行时系统 - Peter Mortensen
@PeterMortensen,是的。 - Simon Wright

5

看起来在Makefile文件中设置了-Werror标志。也许你可以查找Makefile中的CFLAGS选项并移除-Werror标志。Werror标志会将所有警告变成错误。


3
总的来说,忽略编译器的警告并不是一个好主意。但是,如果这是更大的构建过程的一部分,很可能在序列中早先插入了-Werror标志。首先要找到它。
看了一下,似乎有很多标志可以控制编译Ada代码时的警告。例如,-gnatwF将根据此指南“抑制对未引用形式参数的警告”。也许你需要的开关可以在提供的列表中找到。

是的,他粘贴的内容中没有任何导致-Werror被打开的东西。它必须在摘录之前设置。 - Tim Post
1
我知道这不是一个好主意,我尝试构建旧版本的gcc/gnat(gcc-4.3.2),只是为了能够构建AVR gcc/gnat(也是gcc-4.3.2),但我在那里遇到了完全相同的问题。与项目所有者交谈后,他告诉我我的系统Ada编译器(gcc-4.3.4)“太新了”,不适用于该代码库,我的选择是修改源代码或尝试覆盖失败或警告。 - Dr. Watson
我记得曾经短暂地使用过Ada,对我来说,处理它的方法应该是增量构建。据我回忆,Ada在某些方面非常挑剔。 - ezpz
我同意你所说的。今天回家后,我会尝试你列出的一些选项以及其他帖子中提到的选项,但我更倾向于使用Windows版本,因为我可以轻松获取二进制文件并开始工作。 - Dr. Watson

1
在gcc配置中,您可以添加--disable-werror。虽然最好先寻找合适的补丁。

对我来说不起作用:

gcc --disable-werror -Werror -Wall foo.c

cc1: 错误:在-fdisable中指定了未知的werror传递
- Breno Leitão
什么是“gcc configure”? - Peter Mortensen
好的,OP已经离开了(“最后一次出现超过9年前”)。也许其他人可以加入讨论? - Peter Mortensen
使用可执行文件 ./configure(不管那是什么)? - Peter Mortensen
好的,./configure 与 Make 相关联(与 GCC 没有任何关系)。 - Peter Mortensen

0

链接已损坏:“无法找到您要查找的页面 - Peter Mortensen
关于“pragma warnings”:您是指类似 #pragma GCC diagnostic 这样的东西吗? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接