3

我使用自动工具来管理我的 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> 

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

4

2 回答 2

1

我认为在每个文件的基础上实现你想要的最好方法是让 GCC 编译指示禁用受影响文件中的警告。有关详细信息,请参阅关于 SO 的此问题/答案:

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

于 2012-04-23T09:26:27.043 回答
1

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

Automake 在配置时为特定翻译单元定义标志方面没有提供太多粒度,但是添加一个用户可以分配的变量将用于所有非构建源,另一个用于构建源将是相当简单的. 用户可以分配 BUILT_CFLAGS,而不是分配 CFLAGS,您可以将它们添加到 foo_CFLAGS 以获得适当的 foo 值。通常对此的解决方案是什么都不做,让用户进行必要的调整(即,用户将在 CFLAGS 中使用 -Werror 进行构建,看到构建失败,然后在没有 -Werror 的情况下进行重建。)

于 2012-04-23T18:34:27.407 回答