如何在不将警告视为错误的情况下进行编译?


94

问题在于,在Windows上编译良好的同一代码无法在Ubuntu上编译。每当我收到此错误时:

cc1: warnings being treated as errors

现在,它的代码基础很大,我不喜欢修复所有警告。

尽管有警告,有什么方法可以成功编译?


1
我强烈建议尝试修复警告。如果不是立即,那就逐渐。删除后-Werror,您可以在删除警告后按目录将其重新添加。
ugoren

即使您确实编译成功,它也可能无法按您期望的方式运行。我有几个人编写的代码在Windows上可以正常运行,但在Linux上立即崩溃。
丹尼斯·蒙

感谢大家的有用评论和答案。根据要求,看来我必须修复所有已开始的警告。但是现在我得到的警告是来自sqlite3.c:假设(X-c)<= X始终为真时,假定没有发生签名溢出
Saurabh Verma,2012年

Answers:


83

当然,找到-Werror设置位置并删除该标志。那么警告将仅仅是警告。


2
感谢Daniel,但是我的项目中没有设置-Werror标志。我应该在其他地方找它吗?
Saurabh Verma

13
我必须知道在任何地方都必须设置它,默认情况下,警告不会将警告视为错误。如果找不到它,您可以尝试使用-Wno-error夜莺建议覆盖它。除非在makefile中-Werror设置的标志后面传递了,否则它应该起作用CFLAGS
丹尼尔·菲舍尔



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 2012年

1
是的,你是对的。我的意思是我已经确保我的代码没有警告(我没有禁用所有警告)
Saurabh Verma 2012年

3

-Wall并且-Werror编译器选项可能会导致这种情况,请检查编译器设置中是否使用了这些选项。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.