C++ 如何检查autoconf中的支持编译标志是否存在异常
我们可以使用以下方法检查C++ 如何检查autoconf中的支持编译标志是否存在异常,c++,c,clang,clang++,autoconf,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中检查cla
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\u CHECK\u COMPILE\u标志的文档表明警告被忽略
您需要使用宏的参数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\u cv\u cflags\uu{EXTRA}{FLAG}
。显然,如果要使用AS\u VAR\u if
检查缓存变量,那么也可以使用第二个和/或第三个宏参数,如果需要编译标志,可以使用AC\u FATAL
:
AX_CHECK_COMPILE_FLAG([-Wformat-truncation],
,
[AC_FATAL([-Wformat-truncation is required])],
[-Werror])
首先检查/选择编译器。如果选择了编译器,则标志检查应使用Clang
。已经检查了Clang-6.0和Clang++-6.0Try/configure CC=“$CC”CXX=“$CXX”
。您应该能够组合一个最小的示例(MCVE-)。我怀疑大约有6行autoconf
代码要显示(开始、结束、编译器检查,加上AX\u检查\u编译\u标志
行,可能我忘了什么),加上运行的命令行,再加上获得的跟踪输出../configure CC=“$CC”CXX=“$CXX”这个技巧没有帮助@jonathan leffler我使用anchor to nonworking命令将链接添加到源配置文件。