Gcc disable -Wall флаг для определенных файлов / папок

В моем проекте есть файлы с открытым исходным кодом (например: 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 для определенных файлов / папок?

Есть ли способ отключить опцию -Wall для определенных файлов / папок?

Я не верю, что есть какой-либо вариант gcc который можно было бы использовать для достижения этого. Вам необходимо изменить свой Makefile, который вы использовали для компиляции проблемных исходных файлов.

Вы могли бы сделать что-то вроде

 CFLAGS:=$(filter-out -Wall, $(CFLAGS)) 

В Makefile для stb_vorbis , если ваша функция поддерживает функцию filter-out .

Также вы можете написать конкретное правило для этого stb_vorbis.c :

 STB_VOBIS_CFLAGS:=$(filter-out -Wall, $(CFLAGS)) stb_vorbis.o: stb_vorbis.c ... $(CC) $(STB_VOBIS_CFLAGS) -o $@ -c $< 

Хотя нет возможности отключить -Wall с одним вариантом, вы можете отключить специальные предупреждения в GCC, используя -Wno-* для предупреждения * . Так, например, чтобы подавить предупреждение неиспользуемой переменной, вы можете добавить -Wno-unused-variable . Дополнительную информацию о различных вариантах предупреждения см. В http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html .

Например, вы можете использовать целевые переменные, например:

 stb_vorbis.c: CFLAGS += -Wno-unused-variable 

Используя целевые переменные, вы можете добавить параметр -w чтобы запретить все предупреждающие сообщения для файла stb_vorbis.c :

 stb_vorbis.o: CFLAGS += -w 

Или для всего каталога:

 third_party/%.o: CFLAGS += -w 

Общее правило заключается в том, что если у вас есть два или более взаимоисключающих параметра, gcc обычно будет использовать более поздние параметры по сравнению с более ранними.