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

3
我们可以使用以下命令在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,则应使用标志检查。 - Jonathan Leffler
已经检查过 clang-6.0 和 clang++-6.0。 - SkiF
尝试使用 ./configure CC="$CC" CXX="$CXX" - zwol
你应该能够组成一个最小化的示例(MCVE - [MCVE])。我怀疑需要大约6行“autoconf”代码来显示(开头、结尾、编译器检查以及“AX_CHECK_COMPILE_FLAG”行,也许我忘了一些东西),再加上运行命令行,再加上跟踪输出。 - Jonathan Leffler
./configure CC="$CC" CXX="$CXX" 这个提示没有帮助。@jonathan-leffler 我附加了源代码配置文件的链接,其中包含无法使用的命令的锚点。 - SkiF
3300行的configure.ac不是MCVE。我花了几分钟尝试简化它,但似乎依赖于一些我在我的AutoTools设置中没有的额外部分(例如AX_CHECK_COMPILE_FLAG宏)。您没有展示运行配置脚本的输出开头。当我使用从简化的configure.ac创建的configure.sh运行sh configure.sh CC=/usr/bin/clang CXX=/usr/bin/clang++时,我会得到像checking for gcc... /usr/bin/clangchecking whether /usr/bin/clang++ accepts -g... yes这样的行。您的输出中是否看到类似的行? - Jonathan Leffler
1个回答

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

通用形式为 ax_cv_cflags_{EXTRA}_{FLAG},适用于 C 语言。如果您要使用 AS_VAR_IF 检查缓存变量,那么最好同时使用第二和/或第三个宏参数,如果编译标志是必需的,则可以使用 AC_FATAL
AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
    ,
    [AC_FATAL([-Wformat-truncation is required])],
    [-Werror])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接