2017-09-13 106 views
0

我有一個調用check_function_exists()來檢測多個數學函數的CMake宏。CMake check_function_exists只在宏中調用一次

通過下面的輸出,似乎check_function_exists()只被稱爲第一次;

macro(nco_check_funcs func def) 
message(${ARGV0}) 
check_function_exists(${ARGV0} have_result) 
message(${have_result}) 
if (NOT have_result) 
    message("-- Using NCO defined version of ${ARGV0}") 
    add_definitions(-D${ARGV1}) 
endif() 
endmacro(nco_check_funcs) 

nco_check_funcs(atan2 NEED_ATAN2) 
nco_check_funcs(acosf NEED_ACOSF) 
nco_check_funcs(asinf NEED_ASINF) 
在宏下面的例子

被稱爲3次,但 check_function_exists()的輸出僅示出了1次

atan2 
-- Looking for atan2 
-- Looking for atan2 - found 
1 
acosf 
1 
asinf 
1 

回答

2

check_function_exists()這些結果被緩存。

檢查<function>是否由系統上的庫提供,並將結果存儲在<variable>中。 <variable>將被創建爲作爲內部緩存變量

添加以下的開始你的宏:

unset(have_result CACHE) 

或者,如果你想只保留搜索者的該函數的功能(和緩存結果),你需要的變量名依靠這樣的功能:

check_function_exists(${ARGV0} have_result_${ARGV0}) 

現在每個搜索功能都有自己的結果變量。

參考