如何从自动工具生成的 makefile 中删除 -Werror?

问题描述 投票:0回答:4

我正在编译一个使用自动工具构建过程的大型库。 makefile 有很多。 他们每个人都得到了

CFLAGS = .... -Werror

当我尝试编译时,出现一些小警告,这些警告会终止我的设置中的构建。

尽管有警告,我还是想尝试构建,所以我需要从所有 makefile 中删除 -

Werror
。 有没有办法阻止自动工具在所有这些 makefile 中放入
-Werror

makefile autotools automake suppress-warnings autogen
4个回答
3
投票

我在configure.ac中浏览了一下,发现了这个:

AC_ARG_ENABLE([werror],
  AS_HELP_STRING([--disable-werror], [Do not treat warnings as errors]),
  [gcc_werror=$enableval], [gcc_werror=$gcc_warnings])

所以我像这样运行配置:

./configure --disable-werror

它就像一个魅力。 我的 makefile 中不再有

-Werror
标志。 感谢您的评论,直到!


1
投票

我的 sed 方式,创建 Makefile 后

find . -name Makefile -exec sed -i s'/-Werror//g' {} \;

在 Mac 中,将

sed
替换为
gsed


1
投票

对于基于自动工具的项目,您可能需要通过:

./autogen.sh --disable-Werror

观察

W
中的大写字母
Werror


0
投票

是的....在很多地方,您的

automake
会 100% 地自动神奇地执行
-Werror
。 让你想咬牙切齿。

我将向您展示正确的方法,这样您就不会在大屏幕显示器上打孔。

configure.ac

更糟糕的是,其他脚本使

automake
的行为有所不同,例如
./configure
或未知的
autogen.sh

首先

“该死,一直都是

-Werror
”的绝对圣杯,就是检查你的
configure.ac
是否有这个小宝石:

   AM_INIT_AUTOMAKE([foreign -Wall -Werror subdir-objects])

注意:这个

AM_INIT_AUTOMAKE([-Werror])
选项将剥离您简单的 CLI
automake -Wnone
并转换为
automake -Werror
,就像往常一样! 恶心,呃。 为什么?因为
autotool
诸神已下令:停止质疑 UNIX 灰胡子。你知道此时该做什么(把
-Werror
拿出来)

一旦从

-Werror
中删除了讨厌的
AM_INIT_AUTOMAKE
,您现在可以在不同的子目录和子项目中创建其他选择性但 sane
-Wnone
/
-Werror
/(许多)选项。

其次

在上面的“首先”部分完成之前不要检查此步骤:这是我们的主要问题:

检查

configure.ac
中的以下代码片段:

dnl AC_ARG_ENABLE(werror,
dnl         AS_HELP_STRING([--enable-werror],[Enable -Werror in all Makefiles]))

参见

ENABLE
中的
AC_ARG_ENABLE
一词。 这意味着
configure
始终将
-Werror
作为默认值。 您可以使用以下方法禁用它:

    ./configure --disable-werror

当然,如果你想把这个行为改为“falsey”,请添加:

AM_CONDITIONAL([WERROR], [test x"$enable_werror" = x"yes"])

AC_ARG_ENABLE
线之后。

然后重做

autogen.sh
/
./configure
/
make
。 您仍然可以方便地选择打开
-Werror
,但前提是您选择这样做。

清单

如果您没有

configure.ac
怎么办,还有更多清单项目。

./configure
文件

项目顶层目录中缺少

configure.ac
?维护者/作者可能推出了自己的
configure
:让我们查看
configure
文件。

--disable-werror
选项

要查找

configure
是否支持选择性
-Werror
,请执行:

./configure --help | grep werror

如果显示

--disable-werror
,您可以执行
./configure --disable-werror
将其关闭。

configure
文件中搜索
WARNINGS
使用的
automake
,拉出任何硬编码的
-Werror
或替换为
-Wnone
:保存此文件。

多种方式
automake

我打赌你不知道

automake
是一个Perl脚本。 有两种方法可以将
-Werror
作为参数/选项:

  • 作为命令行选项,
    -Werror
  • 作为环境变量,
    WARNINGS=error

对于命令行选项,修复很简单,只需将其替换为

-Wno-error

对于 WARNINGS 环境变量,再次将其替换为

WARNING=no-error

Autogen.sh

另一个最大的问题是

autogen.sh
。 每个人都提出了自己的变体。 每个人似乎都有定制的令人惊叹的多态
autogen.sh
,但实际上应该来自您的发行版
libtool
包。

这是您必须谨慎对待

autogen.sh
的表面价值。

简单的

autogen.sh
仍然很简单:

autoreconf -f [-I m4 ]

但更快的方法是执行:

# autopoint  # if using gettext and internationalization
libtoolize -c -f || glibtoolize -c -f
aclocal -I m4
autoconf
autoheader
automake -acf --foreign

这会将您带到一个安全点,最终用户可以执行最终的构建阶段:

./configure
make
© www.soinside.com 2019 - 2024. All rights reserved.