【问题标题】:gcc, make: how to disable fail on warning?gcc,make:如何禁用警告失败?
【发布时间】:2011-01-25 17:37:22
【问题描述】:

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

【问题讨论】:

  • 我认为任何调试选项都不会导致将警告视为错误(至少我找不到),这是完整的输出吗?

标签: c gcc makefile ada


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,您的解决方案让我克服了上述错误。我收到了来自 Ada 编译器的更多警告,但我现在就开始吧!
【解决方案2】:

在 gcc 配置中你可以添加--disable-werror

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 是的,他粘贴的任何内容都不会导致 -Werror 被打开。它必须在摘录之前。
      • 我知道这不是一个好主意,我尝试构建一个旧版本的 gcc/gnat (gcc-4.3.2) 以便我可以构建 AVR gcc/gnat (也是 gcc-4.3 .2),但我也遇到了同样的问题。在与项目所有者交谈后,他告诉我我的系统 Ada 编译器 (gcc-4.3.4) 对于代码库来说“闻起来太新”,我的选择是破解源代码或尝试覆盖失败或警告。
      • 好吧,我记得我曾与 Ada 打过交道,对我来说,方法必须是增强构建。我记得艾达对事情很挑剔。
      • 再次,我同意你所说的。今天回家后,我将尝试您列出的一些选项以及此线程中的其他选项,但我正在学习仅使用 Windows 版本,因为我可以轻松获取二进制文件并开始工作。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-29
            • 2011-03-23
            • 1970-01-01
            • 1970-01-01
            • 2019-07-03
            • 1970-01-01
            • 2010-11-07
            相关资源
            最近更新 更多