Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查autoconf中的支持编译标志是否存在异常_C++_C_Clang_Clang++_Autoconf - Fatal编程技术网

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命令将链接添加到源配置文件。