CheckCXXSymbolExists¶
检查符号是否存在于 C++
中,作为函数、变量或宏。
- check_cxx_symbol_exists¶
check_cxx_symbol_exists(<symbol> <files> <variable>)
检查在包含给定的头文件
<files>
后,<symbol>
是否可用,并将结果存储在<variable>
中。在一个参数中以分号分隔的列表形式指定文件列表。check_cxx_symbol_exists()
可用于检查 C++ 编译器所见的符号,这与check_symbol_exists()
不同,后者始终使用C
编译器。如果头文件将符号定义为宏,则它被认为是可用的并假定可以工作。如果头文件将符号声明为函数或变量,则该符号也必须可用于链接。如果符号是类型、枚举值或 C++ 模板,则它将不被识别:请考虑改用
CheckTypeSize
或CheckSourceCompiles
模块。
注意
当 <symbol>
(可能)是重载函数时,此命令不可靠。由于没有可靠的方法来预测系统环境中的给定函数是否可能被定义为重载函数,或者可能在其他系统上是重载函数,或者将来会变成这样,因此通常建议使用 CheckSourceCompiles
模块来检查任何函数符号(除非您确信被检查的函数在其他系统上不是重载函数,或者将来也不会是重载函数)。
可以在调用此宏之前设置以下变量来修改检查的运行方式
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(CheckCXXSymbolExists)
# Check for macro SEEK_SET
check_cxx_symbol_exists(SEEK_SET "cstdio" HAVE_SEEK_SET)
# Check for function std::fopen
check_cxx_symbol_exists(std::fopen "cstdio" HAVE_STD_FOPEN)