CheckSymbolExists¶
提供一个宏以检查符号在 C
中是否以函数、变量或宏的形式存在。
- check_symbol_exists¶
check_symbol_exists(<symbol> <files> <variable>)
检查在包含给定头文件
<files>
之后<symbol>
是否可用,并将结果存储到<variable>
中。将一个参数中的文件列表指定为用分号分隔的列表。<variable>
将创建为一个内部缓存变量。
如果头文件将符号定义为宏,则认为该符号可用且能起作用。如果头文件将符号声明为函数或变量,则该符号还必须可用于链接(因此可能无法检测到内在函数)。如果该符号是类型、枚举值或内在函数,则将无法识别(考虑使用 CheckTypeSize
或 CheckSourceCompiles
)。如果检查需要在 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)