autoconf不生成带有-Wall警告的gcc的问题



我有一个简单的项目,带有一个简单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(带有gcc 9.2.1的OpenSUSE Linux(,但调用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吗?难道所有的警告都不应该出现在生产线上吗?如果我直接用-Wformat运行gcc行,则在编译时会显示警告,但当我运行autoconfconfiguremake时不会显示。

我做错了什么?

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

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

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

最新更新