2017-09-13 45 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}) 

现在每个搜索功能都有自己的结果变量。

参考