C语言 gcc,make:如何禁用警告失败?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2414242/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
gcc, make: how to disable fail on warning?
提问by Dr. Watson
I'm trying to build gcc for use with an AVR micro controller and avr-ada, and I've hit a roadblock caused by my regular compiler being too picky about the version I needed for the AVR. I get the following warning, which in turn causes the gcc or make to report an error:
我正在尝试构建用于 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
Is there a way to instruct gcc or make to not fail on warnings?
有没有办法指示 gcc 或 make 在警告时不会失败?
采纳答案by Simon Wright
The trigger here is the -gnatpg (actually, the -gnatg): this is the "GNAT implementation mode (used for compiling GNAT units)". -gnatp means "suppress all checks".
这里的触发器是-gnatpg(实际上是-gnatg):这是“GNAT 实现模式(用于编译GNAT 单元)”。-gnatp 的意思是“禁止所有检查”。
I'm not sure of the full effect of -gnatg, though it certainly causes warnings to be treated as errors -- like -Werror -- at any rate while building the compiler itself; I think I remember seeing non-fatal warnings while building the RTS.
我不确定 -gnatg 的全部效果,尽管它肯定会导致警告被视为错误——比如 -Werror——无论如何在构建编译器本身时;我想我记得在构建 RTS 时看到过非致命警告。
One possibility would be to compile just exp_ch5.adb by hand without -gnatg; the command you list was issued at gcc/, so
一种可能性是在没有 -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
Then back up one level, and 'make' again.
然后备份一个级别,并再次'make'。
This is a cross-compiler, so you won't (I hope!) need to repeat this for all three stages of a full build.
这是一个交叉编译器,因此您(我希望!)不需要在完整构建的所有三个阶段重复此操作。
回答by Dirk Eddelbuettel
Try make -kinstead of just make. That will 'continue' rather than stop.
尝试make -k而不仅仅是make. 那将“继续”而不是停止。
回答by Hyman
As an alternative to diving into the build system, try setting -Wno-errorin CFLAGS, which you should be able to do through the environment (or at configure time, if using the GNU build system).
作为深入构建系统的替代方法,尝试-Wno-error在 CFLAGS 中进行设置,您应该能够通过环境(或在配置时,如果使用 GNU 构建系统)进行设置。
回答by ZelluX
It seems -Werror flag is set in Makefile. Maybe you can look for CFLAGS options in Makefile and remove the -Werror flag. The Werror flag will make all warnings into errors.
似乎在 Makefile 中设置了 -Werror 标志。也许您可以在 Makefile 中查找 CFLAGS 选项并删除 -Werror 标志。Werror 标志将使所有警告都变成错误。
回答by ezpz
In general, it is not a good idea to ignore warnings from your compiler. However, if this is a portion of a larger make process there is likely a -Werrorflag inserted earlier in the sequence. Start by looking for that.
通常,忽略来自编译器的警告并不是一个好主意。但是,如果这是更大的 make 过程的一部分,则可能会-Werror在序列中较早地插入一个标志。从寻找那个开始。
After looking around, there seems to be a wealth of flags to control warnings while compiling Ada code. For instance, -gnatwFwill Suppress warnings on unreferenced formalsaccording to this guide. Possibly the switch you require can be found in the list provided there.
环顾四周,在编译Ada代码时,似乎有很多标志来控制警告。例如,-gnatwF将根据本指南抑制对未引用形式的警告。可能您需要的开关可以在那里提供的列表中找到。
回答by Bob Blogge
In gcc configure you can add --disable-werror.
在 gcc configure 中,您可以添加--disable-werror.
Though it's advisable to seek out a proper patch first.
虽然建议先寻找合适的补丁。
回答by user275257
How about putting "pragma warnings(off, "...")" into the offending parts of your code?
将“pragma warnings(off, "...")”放入代码的违规部分怎么样?

