Cmake CHECK_INCLUDE_FILES找不到头文件

时间:2014-01-17 13:04:44

标签: c++ header cmake

我正在尝试让Cmake检查文件cxxabi.h是否可用。该文件来自c ++标准库,至少使用g ++。我当前的cmake命令如下所示:

include(CheckIncludeFiles)
...
check_include_files(cxxabi.h HAVE_CXXABI)
if(HAVE_CXXABI)
   ...
else(HAVE_CXXABI)
   ...
endif(HAVE_CXXABI)

执行此操作时,我得到:

 -- Looking for include files HAVE_CXXABI
 -- Looking for include files HAVE_CXXABI - not found.

虽然该文件在/usr/include/c++/4.6.4/中可用,但在编译c ++代码时可以通过g ++正确找到。

我怀疑宏check_include_files使用C编译器而不是C ++编译器来编译包含所需文件的小程序,当然这是因为cxxabi.h是C ++文件而失败。

知道如何解决这个问题吗? (即使宏使用C ++编译器而不是C编译器)

2 个答案:

答案 0 :(得分:7)

正如我原来的问题所编辑:

问题解决了。 C ++标头有一个不同的宏,check_include_file_cxx,位于CheckIncludeFileCXX中。

答案 1 :(得分:1)

我最近在MinGW上发现了CHECK_INCLUDE_FILES的另一个问题。测试的文件是" ddk / ntapi.h"。在这个标题的CMakeErr.log中,我得到了一个乘法消息,如" DWORD - 没有命名类型"对于此标头中使用的所有MS类型,依此类推。由于这个原因,编译失败,请求的标题显示为"未找到",而事实并非如此。

这是因为CheckIncludeFile.cxx仅包含请求的标头,而MinGW中的某些标头(可能在其他API中)在其正文中不包含要在CMake创建的独立程序中编译的所有标头列表

此问题的解决方案是将缺少的基本包含添加到CMAKE_REQURED_FLAGS中,或作为CHECK_INCLUDE_FILE_CXX的第三个变量添加:

CHECK_INCLUDE_FILE_CXX("ddk/ntapi.h" VAR "-include windows.h")