如何在 clang 的自动会议中检查支持编译标志

How to check support compile flag in autoconf for clang

本文关键字:检查 支持 编译 标志 会议 clang      更新时间:2023-10-16

我们可以使用以下方法检查对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,一切都很好。

链接到 configure.ac

如果使用clang -Wsome-invalid-option -xc /dev/null,您将看到 clang 发出有关未知选项的警告-Wsome-invalid-optionAX_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])])

对于 Cax_cv_cflags_{EXTRA}_{FLAG}通用形式。 显然,如果你打算使用AS_VAR_IF来检查缓存变量,但是,你也可以使用第二个和/或第三个宏参数,如果需要编译标志,你可以使用AC_FATAL

AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
,
[AC_FATAL([-Wformat-truncation is required])],
[-Werror])