警告就是错误!Linux 5.15默认启用“-Werror”编译器标记

“警告即错误。将警告视为错误,嵌入带有警告的代码,就跟嵌入有错误或者没有通过测试的代码一样,都是极差的做法。嵌入构建工具中的代码不应该产生任何警告信息。”来源于高效程序员的45个习惯——敏捷开发修炼之道

近日,Linux 之父 Linus Torvalds 更改了用于编译内核的 makefile,所有内核构建将默认启用“-Werror”编译器标记, 该代码已合并到 Linux 5.15 内核中,Linus Torvalds表示:“我们真的需要一个干净的编译环境。”
在这里插入图片描述

“-Werror" 标记原始初衷

“-Werror" 编译器标记的主要作用是将所有编译警告认定为编译错误错误,Linus Torvalds初衷是:希望开发人员关注细微且可能会忽视的编译警告,并积极地处理这些细微警告。

虽然现在许多软件编译器都默认启用 “-Werror” 标记来加强程序代码的编译质量,不过大多数都没有达到像 Linus 修改 Linux 内核这样的程度。比如一位开发人员就指出不同编译平台的 153 次编译测试结果中,有 64 次编译器忽视编译警告。

“-Werror”标记仅适用于测试编译

令人无奈的是,尽管 Linus 默认启用“-Werror”标记,希望程序员多关注程序编译时的微小警告,但是却对一些程序员工作造成困扰。一位匿名开发者表示,“由于启用“-Werror”编译器标记,他们的 Clang 编译器编译程序变得异常困难。”

Torvalds 回应称:“Clang 显然在静态堆栈使用方面做了“可怕的”工作。”

Google 软件工程师 Nick Desaulniers 对此提交了一个补丁来修复 Clang 编译器,并回复到:“虽然他可以理解启用 “-Werror”标记的用意,但他认为“-Werror”标记不是解决开发人员忽视检测编译警告的根本方式,“-Werror”只适合某些防止新错误蔓延。不幸的是,目前 Linux 内核没有上述情况,这一变化导致我们几乎所有的 Clang 编译器全部变红了。”
在这里插入图片描述
谷歌软件工程师 Marco Elver也表示:“在一些子系统中发出单一警告阻碍整个内核的测试进度是不合适的。因此“-Werror”适合用于以编译测试为重点的程序代码,将“-Werror”作为 Kconfig 开关的选项,默认为打开,必要的时候关闭它。”

Linus Torvalds 最后补充道:“这似乎是合理的,它主要适合关于构建测试,不过他还是希望“-Werror”可以减少其收到的拉动请求。”

参考链接:https://www.theregister.com/2021/09/08/compromise_linux_kernel_compiler_warnings/

おすすめ

転載: blog.csdn.net/m0_59537084/article/details/120199560
おすすめ