【问题标题】:How to selectively disable -Werror using #pragma with gcc如何使用 #pragma 和 gcc 选择性地禁用 -Werror
【发布时间】:2015-10-29 12:59:33
【问题描述】:

在寻求无警告应用程序的过程中,我开始使用-Werror 告诉 GCC 将所有警告视为错误。

这确实很有帮助,因为有时我会在大型构建输出中错过一两个(严重)警告。 不幸的是,我的项目使用 SQLite 3,其中包含许多警告,如 SQLite 网站所述,无法消除(他们不想删除)。

我想知道是否有办法使用一些 #pragma 我可以放置在 sqlite3.c 文件中告诉 GCC 停止仅将警告视为错误文件。

我试过了:

#pragma GCC diagnostic ignored "-Werror"

没有成功。

我还尝试一一列出导致问题的警告:

#pragma GCC diagnostic ignored "-Wextra"
#pragma GCC diagnostic ignored "-Wfloat-equal"
#pragma GCC diagnostic ignored "-Wundef"
...

...不幸的是,有些警告无法完全关闭(即,初始化会丢弃来自指针目标类型的限定符)。

我能做什么?

【问题讨论】:

标签: c gcc sqlite


【解决方案1】:

您可以为 sqlite3.c 添加一个额外的规则到您的 Makefile 中,该规则在没有 -Werror 或根本没有任何警告的情况下编译文件。按照通常的约定,这样的事情可能就足够了:

sqlite3.o: sqlite3.c
    $(CC) $(CFLAGS) -w -c sqlite3.c

【讨论】:

  • 我想到了,不幸的是我正在使用autoconf / automake ...而且它已经很乱了。在 ./configure 期间选择了警告(和 -Werror),因此我可以在为主机目标构建调试版本时启用它。然后在为目标(嵌入式 Linux)系统构建时禁用警告。
  • @fabrizi0 用automake为特定文件添加额外规则应该没问题。不过,我对此没有经验,您可能需要查阅其文档以了解具体操作方法。还请考虑将其标记为automake 并编辑您的问题以指出您想要一种方法来禁用-Werror 或为一个文件提供-w,如果您想收到该行的答案。
  • FUZxxl:不幸的是,我怀疑 automake 不支持每个对象标志,只支持每个目标标志)。正如这篇文章中提到的那样:stackoverflow.com/questions/149324/…。如果我没有在每个文件上找到任何好的方法,我将不得不创建一个 sqlite 库并将我的应用程序链接到它。
猜你喜欢
  • 2019-12-02
  • 2015-11-10
  • 2011-09-27
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 2010-10-29
  • 2021-03-29
  • 2016-05-10
相关资源
最近更新 更多