Compiler construction clang无法通过显式CPPFLAGS搜索路径进行autoconf AC_CHECK_头检查

Compiler construction clang无法通过显式CPPFLAGS搜索路径进行autoconf AC_CHECK_头检查,compiler-construction,include,llvm,clang,autoconf,Compiler Construction,Include,Llvm,Clang,Autoconf,在一个已建立的autotools管理的项目中,几乎总是使用GCC构建的,我决定尝试使用LLVM clang作为g++的替代品,但发现它落在了使用标准AC_check_header宏的个人编写的头检查上。以下是检查代码: oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])]) C

在一个已建立的autotools管理的项目中,几乎总是使用GCC构建的,我决定尝试使用LLVM clang作为g++的替代品,但发现它落在了使用标准AC_check_header宏的个人编写的头检查上。以下是检查代码:

oldCPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS -I$GSLINCPATH"
AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])])
CPPFLAGS=$oldCPPFLAGS
下面是失败的信息:

checking gsl/gsl_vector.h usability... no
checking gsl/gsl_vector.h presence... no
checking for gsl/gsl_vector.h... no
configure: error: GSL vectors not found.

$GSLINCPATH的值是/usr/include(显式检查),/usr/include/gsl/gsl_vector.h确实存在,并且该检查代码与GCC配合良好。临时切换修改后的$CPPFLAGS似乎是执行此测试的事实上的标准方法,但是否有更好的方法更便于移植?或者这个问题还有其他原因吗?

关于这个检查,config.log的输出是什么?啊,很好的调用:命令行消息似乎有点误导:configure:15294:clang++-c-O2-I/usr/include-I/usr/include conftest.cpp>&5在conftest包含的文件中。cpp:61:In在/usr/include/gsl/gsl_vector包含的文件中。h:4:In在/usr/include/gsl/gsl_vector_complex_long_double.h:25:In文件中包含于/usr/include/gsl/gsl_errno.h:24:包含于/usr/include/errno.h:36:包含于/usr/include/bits/errno.h:25:/usr/include/linux/errno.h:4:10:致命错误:“未找到asm/errno.h”文件对上述布局感到抱歉:注释中无法进行代码格式化?哦,好吧。因此找到了gsl/gsl_vector.h,但是include最终导致了asm/errno.h,而这不是。clang/GSL兼容性问题?谢谢。如果在注释中可以使用代码格式,我也还没有弄清楚:-)。无论如何,您用来替换标志的方法通常是有效的。我用它。问题是错误所抱怨的缺少标题(errno.h中的某个地方)。clang是否应该从/usr/include中引入include?或者它有自己的系统文件存放处吗?啊哈,这似乎是Ubuntu中的一个bug(或者至少是一个包依赖性问题):安装gcc多库包修复了它。干杯:)