Як скомпілювати без попереджень, що трактуються як помилки?


94

Проблема в тому, що той самий код, який добре компілюється в Windows, не може скомпілювати на Ubuntu. Щоразу, коли я отримую цю помилку:

cc1: warnings being treated as errors

Зараз це велика кодова база, і я не люблю виправляти всі попередження.

Чи можна якось успішно скомпілювати, незважаючи на попередження?


1
Я настійно рекомендую спробувати виправити попередження. Якщо не відразу, то поступово. Після того, як ви позбудетеся -Werror, ви можете додати його назад для кожного каталогу після видалення попереджень.
угорен

Навіть якщо ви успішно скомпілюєте, він може працювати не так, як ви очікували. У мене було кілька людей, які пишуть код, який чудово працює у Windows, але негайно виходить з ладу в Linux.
Dennis Meng

Дякуємо усім за корисні коментарі та відповіді. Згідно з вимогою, мені здається, що я повинен виправити всі попередження, які я розпочав. Але тепер попередження, яке я отримую, від sqlite3.c: Припускаючи, що переповнений підпис не відбувається, якщо припускати, що (X - c) <= X завжди відповідає дійсності
Saurabh Verma

Відповіді:


83

Звичайно, знайдіть, де -Werrorвстановлено, і видаліть цей прапор. Тоді попередження будуть лише попередженнями.


2
Дякую, Даніелю, але в моєму проекті не встановлено прапорець -Werror. Чи шукати його десь в іншому місці?
Saurabh Verma

13
Десь це має бути встановлено, за замовчуванням попередження не розглядаються як помилки будь-яким відомим компілятором. Якщо ви не можете знайти його, можете спробувати перевизначити його -Wno-error, як запропонував Nightcracker. Це має спрацювати, якщо -Werrorне передано після прапорів, встановлених у CFLAGSфайлі make.
Даніель Фішер,

31

Ви можете робити всі попередження, які розглядаються як такі, використовуючи -Wno-error. Ви можете зробити конкретні попередження, які розглядаються як такі, використовуючи -Wno-error=<warning name>де <warning name>- це назва попередження, яке ви не хочете сприймати як помилку.

Якщо ви хочете повністю вимкнути всі попередження, використовуйте -w(не рекомендується).


Джерело: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html



4

Якщо ви компілюєте ядро ​​Linux. Наприклад, якщо ви хочете вимкнути попередження, яке "невикористовувана, але встановлена ​​змінна" трактується як помилка. Ви можете додати заяву:

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

у вашому файлі Make


3

Дякуємо за всі корисні пропозиції. Нарешті я переконався, що в моєму коді немає попереджень, але знову отримав це попередження від sqlite3:

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

який я виправив, додавши наступний CFLAG:

-fno-strict-overflow

Існує багато попереджень, які вказують на проблемні конструкції у коді. Якщо їх відключити, ви зможете рухатись у короткій перспективі, але ви ніколи не дізнаєтесь, чи ці проблеми знову стануть переслідувати вас у довгостроковій перспективі.
Бенджамін Баньє,

1
Так, ти маєш рацію. Я мав на увазі, що переконався, що мій код без попереджень (я не відключив усі попередження)
Saurabh Verma

3

-Wallі -Werrorпараметри компілятора можуть спричинити це, будь ласка, перевірте, чи вони використовуються в налаштуваннях компілятора.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.