c++ - 如何在 autoconf 中检查 clang 的支持编译标志

标签 c++ c clang clang++ autoconf

我们可以在 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,一切正常。

link to 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])])

对于 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/

相关文章:

c - diStorm库,反汇编CALL指令

c - 将指针传递给二维数组作为参数

c++ - Clang内置矩阵和 vector 扩展: efficient matrix-vector multiplication

r - 安装 R 包 PearsonDS 会出现意外 token 错误

c - 指向常量整数数组的指针

c++ - 为什么我无法在 range-v3 中获取范围的大小?

c++ - 用 '%20' 替换字符串中的所有空格 (C++)

c++ - 错误功能故障

c++ - 使用 sse intrinsics 的 (A)RGB32 图像最快 50% 缩放

c++ - 使用 shared_ptr 提升 lambda