我们可以使用以下方法检查autoconf
中对特定编译器标志的支持:
AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
这些检查返回的是true,但clang
不支持它们。
AX_CHECK_COMPILE_FLAG([-Woverride-init])
AX_CHECK_COMPILE_FLAG([-Wformat-truncation])
如何检查autoconf
中clang
中的支持编译标志?
我通过
更改编译器export CC=/usr/bin/clang-6.0
export CXX=/usr/bin/clang++-6.0
如果回显到脚本$CC
和$CXX
,一切正常。
答案 0 :(得分:2)
如果使用clang -Wsome-invalid-option -xc /dev/null
,将会看到clang发出有关未知选项-Wsome-invalid-option
的警告。 AX_CHECK_COMPILE_FLAG
的文档指出警告已被忽略。
您需要使用宏的参数4来包含-Werror
:
AX_CHECK_COMPILE_FLAG([-Woverride-init], , , [-Werror])
如果您需要覆盖它,此检查还会生成一个缓存变量:
ax_cv_cflags__Werror__Woverride_init
如果将其设置为yes
,则编译器支持该标志,否则不支持该标志。您也可以将其用于其他标志:
AX_CHECK_COMPILE_FLAG([-Wformat-truncation], , , [-Werror])
AS_VAR_IF([ax_cv_cflags__Werror__Wformat_truncation], [yes],
,
[AC_FATAL([-Wformat-truncation not supported])])
C的通用格式为ax_cv_cflags_{EXTRA}_{FLAG}
。显然,如果您要使用AS_VAR_IF
检查缓存变量,那么,您也可以使用第二个和/或第三个宏参数作为好,如果需要编译标志,可以使用AC_FATAL
:
AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
,
[AC_FATAL([-Wformat-truncation is required])],
[-Werror])