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