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 标志的主要内容,如果未能解决你的问题,请参考以下文章