2017-06-16 146 views
1

我有一個的CMakeLists.txt文件,這些幾行:CMake似乎忽略了一行?

include(CheckSymbolExists) 
check_symbol_exists(alloca stdlib.h;cstdlib ALLOCA_EXISTS) 
check_symbol_exists(malloc stdlib.h;cstdlib MALLOC_EXISTS) 

但在CMake的輸出的相關部分,即出現在所有是這樣的:

... 
-- Looking for alloca 
-- Looking for alloca - found 
... 

一無所知malloc出現在所有。 CMake忽略我的線?或者是其他事情發生?

編輯:

我甚至嘗試這個...

unset(CMAKE_REQUIRED_QUIET) 

...每次調用check_symbol_exists,這並沒有解決問題之前。

+0

如果你添加了'--trace'參數到cmake命令它會給你更多的輸出 –

回答

0

經過我的CMakeLists文件和文檔閱讀玩了很多後,我意識到我的錯誤是雙重的。

首先,我沒有把文件列表放在引號中,所以謝謝+ Tsyvarev的答案。

我意識到自己的錯誤讀check_symbol_exists文檔時的第二部分,並且發現這一點:

如果檢查需要C++做,可以考慮使用CHECK_CXX_SYMBOL_EXISTS(),它不一樣CHECK_SYMBOL_EXISTS (),但在C++中。

鏈接:CheckSymbolExists

於是我意識到我應該使用check_cxx_symbol_exists因爲check_symbol_exists將不能夠通過C++頭看。

更改宏調用和導入行後,我的腳本按預期工作。

乾杯!

3

爲了傳遞一個列表單個參數的功能/宏,列表應括到雙引號:約list參數

# Double quotes are required around the list argument 
check_symbol_exists(alloca "stdlib.h;cstdlib" ALLOCA_EXISTS) 

雙引號是沒有必要僅當這是最後的非定位參數:

# Here double quotes can be omited. 
set(A a;b;c) 

沒有雙引號代碼被解釋爲

check_symbol_exists(alloca stdlib.h cstdlib ALLOCA_EXISTS) 
check_symbol_exists(malloc stdlib.h cstdlib MALLOC_EXISTS) 

cstdlib變成3-d參數給宏,它表示其中結果應當被存儲的變量中。給定變量在第一次調用時創建(檢查alloca)。第二個電話(檢查malloc)檢查變量,發現它已被設置,將其解釋爲「檢查已執行」,並且什麼都不做。

+0

我剛試過這個,但它仍然不起作用... – Dovahkiin

+0

你是否修改過**這兩行**辦法? – Tsyvarev