检查符号存在¶
提供一个宏来检查符号是否作为函数、变量或宏存在于“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_DEFINITIONSa ;-list 要定义的宏 (-DFOO=bar)。
CMAKE_REQUIRED_INCLUDESa ;-list 要传递给编译器的标头搜索路径。
CMAKE_REQUIRED_LINK_OPTIONS在 3.14 版本加入: a ;-list 添加到链接命令的选项。
CMAKE_REQUIRED_LIBRARIESa ;-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)