CMake check_函数在宏中只存在一次调用

CMake check_函数在宏中只存在一次调用,cmake,macros,Cmake,Macros,我有一个CMake宏,它调用check_function_exists()来检测几个数学函数 从下面的输出来看,check_函数_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 def

我有一个CMake宏,它调用check_function_exists()来检测几个数学函数

从下面的输出来看,check_函数_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_函数_exists()只显示一次

atan2
-- Looking for atan2
-- Looking for atan2 - found
1
acosf
1
asinf
1
这些结果将被缓存

检查系统上的库是否提供了
,并将结果存储在
中<代码>将作为内部缓存变量创建

将以下内容添加到宏的开头:

unset(have_result CACHE)
或者,如果希望保留只搜索一次函数(并缓存结果)的功能,则需要变量名依赖于函数,如下所示:

check_function_exists(${ARGV0} have_result_${ARGV0})
现在,每个函数的搜索都有自己的结果变量

参考

的这些结果将被缓存

检查系统上的库是否提供了
,并将结果存储在
中<代码>将作为内部缓存变量创建

将以下内容添加到宏的开头:

unset(have_result CACHE)
或者,如果希望保留只搜索一次函数(并缓存结果)的功能,则需要变量名依赖于函数,如下所示:

check_function_exists(${ARGV0} have_result_${ARGV0})
现在,每个函数的搜索都有自己的结果变量

参考