检查符号存在

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

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

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

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

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

CMAKE_REQUIRED_FLAGS

编译命令行标志的字符串。

CMAKE_REQUIRED_DEFINITIONS

a ;-list 要定义的宏 (-DFOO=bar)。

CMAKE_REQUIRED_INCLUDES

a ;-list 要传递给编译器的标头搜索路径。

CMAKE_REQUIRED_LINK_OPTIONS

在 3.14 版本加入: a ;-list 添加到链接命令的选项。

CMAKE_REQUIRED_LIBRARIES

a ;-list 要添加到链接命令的库。请参阅政策:policy:CMP0075

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)