Как отключить указанное предупреждение для указанного файла при использовании 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 3

2 ответа:

Ответ во многом зависит от того, как вы вводите -Wall -Werror в сборку. Если вы назначаете CFLAGS непосредственно в configure.ac решение состоит в том, чтобы прекратить это делать. CFLAGS является пользовательской переменной и должна быть назначена только пользователем. Если вы устанавливаете их в AM_CFLAGS, Вы можете добавить их только в определенные файлы через foo_CFLAGS. Однако привязка -Wall -Werror к CFLAGS является плохой идеей по нескольким причинам, одна из которых заключается в том, что не все компиляторы принимают эти флаги. Вы хотите, чтобы сборка умерла вместе с - Веррор-неизвестный вариант? Хотя многие (большинство?) компиляторы принимают -Wall -Werror, дело в том, что вы не знаете, какой компилятор использует ваш пользователь, и вы не знаете, является ли -Werror полезным или даже принятым, и вы не знаете, хочет ли пользователь установить эти флаги. Пусть пользователь сам решает.

Automake не обеспечивает большой детализации с точки зрения определения флагов для конкретных единиц перевода во время настройки, но было бы довольно просто добавить переменную, которую пользователь может назначить это будет использоваться для всех не построенных источников, и еще один для построенных источников. Вместо того, чтобы назначить переменные CFLAGS, пользователь может назначить BUILT_CFLAGS, и вы могли добавить их в foo_CFLAGS для соответствующих значений фу. Обычно решение для этого состоит в том, чтобы ничего не делать и позволить пользователю сделать необходимые корректировки (т. е. пользователь будет строить с-Werror в CFLAGS, видеть сбой сборки, а затем перестраивать без-Werror.)

Я думаю, что лучший способ достичь того, что вы хотите на основе каждого файла,-это поместить прагмы GCC для отключения предупреждений в затронутых файлах. Смотрите этот вопрос/ответ на SO для получения подробной информации:

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