CheckFunctionExists

检查一次 C 函数是否可以从系统库中链接。

check_function_exists
check_function_exists(<function> <variable>)

检查 <function> 是否由系统中的库提供,并将结果存储在内部缓存变量 <variable> 中。

在调用此宏之前,可以设置以下变量来修改检查运行方式

CMAKE_REQUIRED_FLAGS

要传递给编译器的其他标志的字符串。字符串必须以空格分隔——;-list 将不起作用。CMAKE_<LANG>_FLAGS 及其关联的配置特定变量的内容在 CMAKE_REQUIRED_FLAGS 的内容之前自动添加到编译器命令中。

CMAKE_REQUIRED_DEFINITIONS

A ;-list of compiler definitions of the form -DFOO or -DFOO=bar. A definition for the name specified by <resultVar> will also be added automatically.

CMAKE_REQUIRED_INCLUDES

A ;-list of header search paths to pass to the compiler. These will be the only header search paths used--the contents of the INCLUDE_DIRECTORIES directory property will be ignored.

CMAKE_REQUIRED_LINK_OPTIONS

在版本 3.14 中添加。

A ;-list of options to add to the link command (see try_compile() for further details).

CMAKE_REQUIRED_LIBRARIES

A ;-list of libraries to add to the link command. These can be the name of system libraries or they can be Imported Targets (see try_compile() for further details).

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中添加。

传递给链接器搜索路径库的;-list(进一步的详情,请见try_compile())。

CMAKE_REQUIRED_QUIET

3.1 版本新增。

如果该变量评估为布尔真值,与该检查相关的状态消息将被隐藏。

注意

出于以下原因,优先使用CheckSymbolExistsCheckSourceCompiles,而不是该模块

  • check_function_exists()无法检测内嵌在头文件或指定为宏的函数。

  • check_function_exists()无法检测 Win32 API 中 32 位版本中的任何东西,因为调用约定不匹配。

  • check_function_exists()仅验证链接,而不验证函数在系统头文件中声明。