我们可以在 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
,一切正常。
最佳答案
如果您使用 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])
关于c++ - 如何在 autoconf 中检查 clang 的支持编译标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52557417/