CheckSymbolExists

提供一个宏来检查符号在 C 中是否作为函数、变量或宏存在。

check_symbol_exists
check_symbol_exists(<symbol> <files> <variable>)

检查在包含给定的头文件 <files> 后,<symbol> 是否可用,并将结果存储在 <variable> 中。在一个参数中以分号分隔列表的形式指定文件列表。<variable> 将被创建为内部缓存变量。

如果头文件将符号定义为宏,则认为它是可用的并假定可以工作。如果头文件将符号声明为函数或变量,则该符号也必须可用于链接(因此可能无法检测到内联函数)。如果符号是类型、枚举值或内联函数,则它将无法被识别(考虑使用 CheckTypeSizeCheckSourceCompiles)。如果需要在 C++ 中进行检查,请考虑改用 CheckCXXSymbolExists

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

CMAKE_REQUIRED_FLAGS

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

CMAKE_REQUIRED_DEFINITIONS

形式为 -DFOO-DFOO=bar 的编译器定义的 ;-list<resultVar> 指定的名称的定义也将自动添加。

CMAKE_REQUIRED_INCLUDES

要传递给编译器的头文件搜索路径的 ;-list。这些将是唯一使用的头文件搜索路径——INCLUDE_DIRECTORIES 目录属性的内容将被忽略。

CMAKE_REQUIRED_LINK_OPTIONS

在版本 3.14 中添加。

要添加到链接命令的选项的 ;-list(有关更多详细信息,请参阅 try_compile())。

CMAKE_REQUIRED_LIBRARIES

要添加到链接命令的库的 ;-list。这些可以是系统库的名称,也可以是 导入目标(有关更多详细信息,请参阅 try_compile())。

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中添加。

要传递给链接器的库搜索路径的 ;-list(有关更多详细信息,请参阅 try_compile())。

CMAKE_REQUIRED_QUIET

在版本 3.1 中添加。

如果此变量的值为布尔真值,则将抑制与检查关联的所有状态消息。

例如

include(CheckSymbolExists)

# Check for macro SEEK_SET
check_symbol_exists(SEEK_SET "stdio.h" HAVE_SEEK_SET)
# Check for function fopen
check_symbol_exists(fopen "stdio.h" HAVE_FOPEN)