2014-01-17 77 views
2

我試圖讓Cmake檢查文件cxxabi.h是否可用。該文件來自C++標準庫,至少使用g ++。我現在cmake的命令是這樣的:Cmake CHECK_INCLUDE_FILES找不到頭文件

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

當這樣執行,我得到:

​​

雖然文件是/usr/include/c++/4.6.4/可用,可以適當當我編譯一個C++代碼時可以通過g ++找到。

我懷疑宏check_include_files使用C編譯器而不是C++編譯一個包含所需文件的小程序,這當然會失敗,因爲cxxabi.h是一個C++文件。

任何想法如何解決? (即使宏使用C++編譯器而不是C之一)

+3

嗨!更好地發佈答案並接受它以標記此問題已解決。 –

回答

5

如在我原來的問題編輯:

問題解決了。 C++頭文件check_include_file_cxx中有一個不同的宏,位於CheckIncludeFileCXX中。

+0

感謝您的回答。一個小的補充 - 你應該刪除當前的cmake緩存('CMakeCache.txt')。沒有它** cmake **不會更新狀態。 – avtomaton

1

我最近在MinGW中發現CHECK_INCLUDE_FILES存在另一個問題。測試的文件是「ddk/ntapi.h」。在這個頭文件的CMakeErr.log中,我得到了一個類似於「DWORD - 不命名類型」的乘法消息等等,用於這個頭文件中使用的所有MS類型。由於這個原因,編譯失敗,請求的標題顯示爲「未找到」,但它不是真的。

發生這種情況是因爲CheckIncludeFile.cxx只包含請求的頭文件,並且MinGW中的一些頭文件(可能在其他API中)沒有在其主體中包含要編譯到獨立程序中的所有頭文件列表創建。

這個問題的解決方案是增加缺席基本包括進入CMAKE_REQURED_FLAGS,或作爲CHECK_INCLUDE_FILE_CXX的第三個變量:

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