我有一个简单的项目,带有一个简单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行,则在编译时会显示警告,但当我运行autoconf
、configure
和make
时不会显示。
我做错了什么?
AM_INIT_AUTOMAKE(...)
调用中的-Wall
标志指的是来自automake和相关工具(如aclocal(的警告,而不是编译器警告。当您运行autoreconf
时,您将看到这些警告。
请注意,虽然也可以将-Werror
添加到AM_INIT_AUTOMAKE(...)
中,以使autoreconf
在出现警告时运行失败,但许多常见的宏(如gettext或libtool附带的宏(仍将使用不推荐使用的宏,这些宏会生成警告,因此-Werror
意味着您不能使用此标准工具集,所以-Werror
在许多情况下不是很有用。
如果你想添加编译器选项,有一个第三方宏(例如AX_CHECK_COMPILE_FLAG
(可以测试编译器是否识别给定的编译选项,然后你可以将它们添加到某个变量中,并在某些地方使用。不过,这是一个不同的stackoverflow问题。