autoconf 没有使用 -Wall 警告生成 gcc 的问题

Problem with autoconf not making gcc with -Wall warnings

我有一个带有简单 configure.ac 脚本的简单项目:

AC_INIT(...)
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES(...)
AC_OUTPUT

使用 GNU Autoconf 2.69 版(OpenSUSE Linux 和 gcc 9.2.1),但调用 gcc 时没有警告标志:

gcc -DHAVE_CONFIG_H -I. -I..    -g -O2 -MT aprog.o -MD -MP -MF .deps/aprog.Tpo -c -o aprog.o aprog.c
mv ...
gcc  -g -O2   -o aprog aprog.o -lgmp

特别是,我发现 -Wformat -Wall 不应该包括 -Wformat 吗?难道所有的警告都不应该出现在 make 行上吗?如果我 运行 gcc 直接与 -Wformat 行,则编译时会显示警告,但当我 运行 autoconfconfiguremake 时则不会.

我做错了什么?

AM_INIT_AUTOMAKE(...) 调用中的 -Wall 标志是指来自 automake 和相关工具(如 aclocal)的警告,而不是编译器警告。当您 运行ning autoreconf.

时,您将看到这些警告

请注意,虽然您 可以 也可以将 -Werror 添加到 AM_INIT_AUTOMAKE(...) 以使您的 autoreconf 运行 警告失败,许多常见的宏(如 gettext 或 libtool 附带的宏)仍会使用已弃用的宏,这会生成警告,因此 -Werror 意味着您不能使用这套标准工具,因此 -Werror在很多情况下不是很有用。

如果你想添加编译器选项,有一个第三方宏(例如AX_CHECK_COMPILE_FLAG)可以测试编译器是否识别给定的编译选项,然后你可以将它们添加到某个变量并在地方。不过,这是一个不同的 Whosebug 问题。