Как скомпилировать без предупреждений, рассматриваемых как ошибки?

94

Проблема в том, что тот же код, который хорошо компилируется в Windows, не может быть скомпилирован в Ubuntu. Каждый раз, когда я получаю эту ошибку:

cc1: warnings being treated as errors

Это большая база кода, и мне не нравится исправлять все предупреждения.

Есть ли способ успешно скомпилировать, несмотря на предупреждения?

Саураб Верма
источник
1
Я настоятельно рекомендую попытаться исправить предупреждения. Если не сразу, то постепенно. Избавившись от него -Werror, вы можете добавить его обратно для каждого каталога после удаления предупреждений.
ugoren
Даже если вы успешно скомпилируете, он может работать не так, как вы ожидаете. Несколько человек писали код, который отлично работает в Windows, но сразу дает сбой в Linux.
Деннис Менг
Спасибо всем за полезные комментарии и ответы. По требованию кажется, что мне нужно исправить все предупреждения, которые я начал. Но теперь предупреждение, которое я получаю, исходит от sqlite3.c: Предполагая, что подписанное переполнение не происходит, если предполагать, что (X - c) <= X всегда истинно
Саураб Верма

Ответы:

83

Конечно, найдите, где -Werrorон установлен, и снимите этот флаг. Тогда предупреждения будут только предупреждениями.

Дэниел Фишер
источник
2
Спасибо, Даниэль, но в моем проекте не установлен флаг -Werror. Стоит ли искать его где-нибудь еще?
Саураб Верма
13
Где-то это должно быть установлено, по умолчанию предупреждения не рассматриваются как ошибки ни одним из известных мне компиляторов. Если вы не можете его найти, вы можете попробовать заменить его -Wno-error, как предложил nightcracker. Это должно работать, если только -Werrorне передается после флагов, которые вы установили в CFLAGSmake-файле.
Daniel Fischer
32

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

Если вы хотите полностью отключить все предупреждения, используйте -w(не рекомендуется).


Источник: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html

orlp
источник
4

Если вы компилируете ядро ​​linux. Например, если вы хотите отключить предупреждение о том, что «неиспользованная, но установленная переменная» обрабатывается как ошибка. Вы можете добавить заявление:

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

в вашем Makefile

Энди Чжан
источник
3

Спасибо за все полезные предложения. Я наконец убедился, что в моем коде нет предупреждений, но снова получил это предупреждение от sqlite3:

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

что я исправил, добавив следующий CFLAG:

-fno-strict-overflow
Саураб Верма
источник
Многие предупреждения указывают на проблемные конструкции в вашем коде. Отключение их позволит вам двигаться дальше в краткосрочной перспективе, но вы никогда не узнаете, вернутся ли эти проблемы, чтобы преследовать вас в долгосрочной перспективе.
Benjamin Bannier,
1
Да ты прав. Я имел в виду, что убедился, что мой код не содержит предупреждений (я не отключил все предупреждения)
Саураб Верма,
3

-Wallи -Werrorпараметры компилятора могут вызвать это, проверьте, используются ли они в настройках компилятора.

Марлаб
источник