如何使用 #pragma 和 gcc 选择性地禁用 -Werror
Posted
技术标签:
【中文标题】如何使用 #pragma 和 gcc 选择性地禁用 -Werror【英文标题】:How to selectively disable -Werror using #pragma with gcc 【发布时间】: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"
...
...不幸的是,有些警告无法完全关闭(即,初始化会丢弃来自指针目标类型的限定符)。
我能做什么?
【问题讨论】:
相关:***.com/questions/32049296/…***.com/questions/58956003/…***.com/questions/3378560/… 【参考方案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 不支持每个对象标志,只支持每个目标标志)。正如这篇文章中提到的那样:***.com/questions/149324/…。如果我没有在每个文件上找到任何好的方法,我将不得不创建一个 sqlite 库并将我的应用程序链接到它。以上是关于如何使用 #pragma 和 gcc 选择性地禁用 -Werror的主要内容,如果未能解决你的问题,请参考以下文章
Visual中#pragma comment(user)和gcc中#pragma Comment的目的
如何在 gcc 的特定部分中放置一组变量,arm 是不是有类似 #pragma default_variable_attributes 的东西