【问题标题】:gcc disable -Wall flag for specific files/foldersgcc 禁用特定文件/文件夹的 -Wall 标志
【发布时间】: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 选项?

【问题讨论】:

    标签: android c++ c gcc makefile


    【解决方案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 有时也很有帮助,请参阅:stackoverflow.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 通常会优先选择后面的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-30
        • 2015-08-22
        • 2011-09-25
        • 2013-02-22
        • 1970-01-01
        相关资源
        最近更新 更多