gcc,make:如何禁用警告失败?
我正在尝试使用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或使警告不失败?
这里的触发器是-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
然后备份一个级别,再次’make’。
这是一个交叉编译器,所以你不会(我希望!)需要在完整构建的所有三个阶段重复这个。
尝试make -k
而不仅仅是make
。 这将“继续”而不是停止。
作为潜入构建系统的替代方法,尝试在CFLAGS中设置-Wno-error
,您应该能够通过环境(或在配置时,如果使用GNU构建系统)进行设置。
通常,忽略编译器的警告不是一个好主意。 但是,如果这是较大make过程的一部分,则序列中可能会-Werror
插入-Werror
标志。 从寻找它开始。
环顾四周后,在编译Ada代码时似乎有大量的标志来控制警告。 例如,根据本指南 , -gnatwF
将根据未引用的 -gnatwF
禁止警告 。 可能您需要的开关可以在那里提供的列表中找到。
似乎-Werror标志在Makefile中设置。 也许您可以在Makefile中查找CFLAGS选项并删除-Werror标志。 Werror标志会使所有警告都出错。
在gcc配置中,您可以添加--disable-werror
。
虽然建议先找一个合适的补丁。
如何将“pragma warnings(off,”……“)”放入代码的违规部分?
见http://www.adacore.com/2007/11/19/ada-gem-18/ 。