CMake的check_function_exists只调用一次宏(CMake check_func

2019-10-30 06:46发布

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

Answer 1:

这些结果check_function_exists()缓存。

检查<function>由库提供的系统上,并且结果存储在<variable><variable>作为内部缓存变量来创建。

添加以下到您的开始宏:

unset(have_result CACHE)

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

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

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

参考

  • unset()


文章来源: CMake check_function_exists only called one time in macro
标签: cmake macros