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


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



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параметры компилятора могут вызвать это, проверьте, используются ли они в настройках компилятора.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.