CheckSymbolExists

提供一个宏以检查符号在 C 中是否以函数、变量或宏的形式存在。

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

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

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

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

CMAKE_REQUIRED_FLAGS

传递给编译器的附加标志字符串。字符串必须用空格分隔——;-list 不起作用。在 CMAKE_REQUIRED_FLAGS 的内容之前自动将 CMAKE_<LANG>_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,用于向链接命令添加库。它们可以是系统库的名称,也可以是导入的 targets(有关详细信息,参见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)