【问题标题】:How to check support compile flag in autoconf for clang如何在 autoconf 中为 clang 检查支持编译标志
【发布时间】:2018-09-28 14:25:07
【问题描述】:

我们可以使用以下方法检查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])

如何检查autoconfclang 的支持编译标志?

我通过

更改我的编译器
export CC=/usr/bin/clang-6.0 
export CXX=/usr/bin/clang++-6.0 

如果回显到脚本$CC$CXX,一切正常。

link to configure.ac

【问题讨论】:

  • 首先检查/选择您的编译器。如果那是选定的编译器,那么标志检查应该使用Clang
  • 已经检查过clang-6.0和clang++-6.0
  • 试试./configure CC="$CC" CXX="$CXX"
  • 您应该能够组装一个最小的示例(MCVE — minimal reproducible example)。我怀疑有大约 6 行 autoconf 代码要显示(开始、结束、编译器检查,加上 AX_CHECK_COMPILE_FLAG 行,也许我忘记了一些东西),加上你运行的命令行,加上跟踪你得到的输出。
  • ./configure CC="$CC" CXX="$CXX" 这个技巧没有帮助。 @jonathan-leffler 我添加了指向源配置文件的链接,并带有非工作命令的锚点。

标签: c++ c clang clang++ autoconf


【解决方案1】:

如果您使用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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多