如何在使用autotools时禁用特定文件的特定警告?

时间:2012-04-23 06:02:10

标签: c makefile antlr autotools

我使用autotools来管理我的CPP项目。编译我的代码时,gcc有以下标志:-Wall -Werror

因此,当我的代码中出现警告时,gcc会将其视为错误,编译将被中断。

我的项目还包括antlr3,它生成多个文件。生成的文件包含几个中断编译的警告。

error: unused variable ‘index21_49’
in CongerCQLLexer.c, line 20589, column 24
20587>                 ANTLR3_UINT32 LA21_49;
20588> 
20589>                 ANTLR3_MARKER index21_49;
20590> 
20591> 

error: unused variable ‘index21_131’
in CongerCQLLexer.c, line 20622, column 24
20620>                 ANTLR3_UINT32 LA21_131;
20621> 
20622>                 ANTLR3_MARKER index21_131;
20623> 
20624> 

我想知道如何禁用生成的文件的警告? 谢谢。

2 个答案:

答案 0 :(得分:1)

我认为在每个文件的基础上实现所需内容的最佳方法是使GCC编译指示禁用受影响文件中的警告。有关详细信息,请参阅此问题/答案:

https://stackoverflow.com/a/3394305/379897

答案 1 :(得分:1)

答案很大程度上取决于您如何将-Wall -Werror加入构建中。如果您直接在configure.ac中分配CFLAGS,解决方案就是停止这样做。 CFLAGS是用户变量,只应由用户分配。如果您要在AM_CFLAGS中进行设置,则可以通过foo_CFLAGS将其仅添加到特定文件中。但是,由于几个原因,将-Wall -Werror分配给CFLAGS是一个坏主意,其中一个原因是并非所有编译器都接受这些标志。你想用“-Werror - 未知选项”来构建死机吗?尽管许多(大多数?)编译器确实接受-Wall -Werror,但关键是你不知道你的用户正在使用什么编译器,你不知道-Werror是否有用甚至被接受,你做了不知道用户是否想要设置这些标志。让用户决定。

Automake在配置时为特定转换单元定义标志方面没有提供太多粒度,但是添加一个用户可以分配用于所有非构建源的变量并且另一个变量是相当简单的。对于建造的来源。用户可以分配BUILT_CFLAGS,而不是分配CFLAGS,您可以将这些添加到foo_CFLAGS以获取适当的foo值。通常,解决方案是不做任何事情并让用户进行必要的调整(即,用户将在CFLAGS中使用-Werror进行构建,请参阅构建失败,然后在没有-Werror的情况下重建。)