gcc 禁用特定文件/文件夹的 -Wall 标志

Posted

技术标签:

【中文标题】gcc 禁用特定文件/文件夹的 -Wall 标志【英文标题】:gcc disable -Wall flag for specific files/folders 【发布时间】:2014-03-18 07:31:14 【问题描述】:

我的项目中有一些开源库文件(例如:http://nothings.org/stb_vorbis/stb_vorbis.c)。 -Wall 选项在我的 android.mk 文件中启用。在编译期间,stb_vorbis.c 中会生成几个警告。

warning: unused variable <var>
warning: statement with no effect
warning: <var> defined but not used
warning: <var> may be used uninitialized in this function

出于某种原因,我不想修改 stb_vorbis.c 但仍希望 -Wall 选项可用于我自己的源文件。有什么方法可以禁用特定文件/文件夹的 -Wall 选项?

【问题讨论】:

【参考方案1】:

有什么方法可以禁用特定文件/文件夹的 -Wall 选项?

我不相信有任何gcc 选项可用于实现此目的。您需要更改用于编译有问题的源文件的 Makefile。

你可以这样做

CFLAGS:=$(filter-out -Wall, $(CFLAGS))

stb_vorbis 的 Makefile 中,如果您的 make 支持 filter-out 函数。

你也可以为stb_vorbis.c写一个特定的规则:

STB_VOBIS_CFLAGS:=$(filter-out -Wall, $(CFLAGS))
stb_vorbis.o: stb_vorbis.c ...
        $(CC) $(STB_VOBIS_CFLAGS) -o $@ -c $<

【讨论】:

我不明白你的意思。它会仅排除 stb_vorbis.c 还是整体应用?对于所有源文件,我只有一个 make 文件。 @gmuhammad 你有一个 Makefile 来编译来自stb_vorbis 的文件吗?如果你有,请在 Makefile 中调用filter-out 我没有单独的 stb_vorbis 制作文件 @gmuhammad 不,不是单独的 Makefile。只需在您当前的 Makefile 中为 stb_vorbis.c 添加一条新规则即可。 使用 -isystem 有时也很有帮助,请参阅:***.com/questions/15053776/…【参考方案2】:

虽然无法通过一个选项关闭 -Wall,但您可以关闭 GCC 中的特定警告,使用 -Wno-* 警告 *。因此,例如,要抑制 未使用的变量 警告,您可以添加 -Wno-unused-variable。有关不同警告选项的更多信息,请参阅 http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

因此,例如,您可以使用特定于目标的变量,例如:

stb_vorbis.c: CFLAGS += -Wno-unused-variable

【讨论】:

【参考方案3】:

使用target-specific variables,您可以附加-w 选项来禁止stb_vorbis.c 文件的所有警告消息:

stb_vorbis.o: CFLAGS += -w

或整个目录:

third_party/%.o: CFLAGS += -w

一般的经验法则是,如果您有两个或多个互斥选项,gcc 通常会优先选择后面的选项。

【讨论】:

以上是关于gcc 禁用特定文件/文件夹的 -Wall 标志的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上默认启用 GCC 编译器 C++11 标志

为内联汇编参数打开立即值传播的特定 GCC 标志是啥?

不要在 GCC 中使用 -O3 标志优化特定循环 [关闭]

有没有办法让 gcc 禁用特定警告

在 GCC 的函数中禁用特定循环的自动矢量化

在特定变量上禁用 GCC“可能未初始化”