CMake check_function_exists仅在宏中调用一次

时间:2017-09-13 18:40:14

标签: cmake macros

我有一个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

1 个答案:

答案 0 :(得分:2)

缓存check_function_exists()的结果。

  

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

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

unset(have_result CACHE)

或者如果你想保留只搜索函数的功能(并缓存结果),你需要变量名依赖于这样的函数:

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

现在每次搜索函数都有自己的结果变量。

<强>参考