CheckLibraryExists¶
此模块提供了一个命令来检查 C 库是否存在。
在 CMake 项目中加载此模块,使用
include(CheckLibraryExists)
命令¶
此模块提供以下命令
- check_library_exists¶
检查指定的库是否存在以及给定的 C 函数是否可用(仅检查一次)
check_library_exists(<library> <function> <location> <variable>)
此命令尝试链接一个测试可执行文件,该文件使用指定的 C
<function>
,以验证它是否由系统或用户提供的<library>
提供。参数为
<library>
库的名称、库文件的完整路径或 导入目标。
<function>
应在系统或用户提供的库
<library>
中可用的函数的名称。<location>
包含库文件的目录。在检查期间,它被添加到链接搜索路径中。如果这是一个空字符串,则只使用默认库搜索路径。
<variable>
存储检查结果的变量的名称。此变量将作为内部缓存变量创建。
注意
此命令旨在执行基本的健全性检查,以验证库是否提供预期功能,或者是否正在找到正确的库。但是,它只验证函数符号是否可以成功链接——它不确保函数在库头文件中声明,也不能检测内联或定义为预处理器宏的函数。为了更可靠地检测函数的可用性,请首选使用
CheckSymbolExists
或CheckSourceCompiles
。影响检查的变量
在调用此命令之前,可以设置以下变量来修改检查的运行方式
CMAKE_REQUIRED_FLAGS
一个空格分隔的附加标志字符串,用于传递给编译器。分号分隔的列表 将不起作用。
CMAKE_<LANG>_FLAGS
及其相关的特定于配置的CMAKE_<LANG>_FLAGS_<CONFIG>
变量的内容会自动添加到编译器命令的前面,然后再添加此变量的内容。
CMAKE_REQUIRED_DEFINITIONS
一个分号分隔的编译器定义列表,每个定义的形式为
-DFOO
或-DFOO=bar
。检查命令的结果变量参数指定的名称的定义也会自动添加。
CMAKE_REQUIRED_LINK_OPTIONS
3.14 版新增。
一个分号分隔的选项列表,用于添加到链接命令(有关详细信息,请参见
try_compile()
)。
CMAKE_REQUIRED_LIBRARIES
一个分号分隔的库列表,用于添加到链接命令。它们可以是系统库的名称,也可以是导入目标(有关详细信息,请参见
try_compile()
)。
CMAKE_REQUIRED_LINK_DIRECTORIES
在版本 3.31 中添加。
一个分号分隔的库搜索路径列表,用于传递给链接器(有关详细信息,请参见
try_compile()
)。
CMAKE_REQUIRED_QUIET
版本 3.1 中新增。
如果此变量评估为布尔真值,则与检查关联的所有状态消息都将被抑制。
示例¶
检查 curl
库是否存在于默认路径中并具有 curl_easy_perform()
函数
include(CheckLibraryExists)
check_library_exists(curl curl_easy_perform "" HAVE_LIBRARY_CURL)
检查库是否存在于特定的非标准位置并具有指定函数
include(CheckLibraryExists)
check_library_exists(curl curl_easy_perform "/opt/curl/lib" HAVE_LIBRARY_CURL)
也可以使用 导入目标(例如,来自 find_package()
调用)
find_package(CURL)
# ...
if(TARGET CURL::libcurl)
include(CheckLibraryExists)
check_library_exists(CURL::libcurl curl_easy_perform "" HAVE_LIBRARY_CURL)
endif()
另请参阅¶
CheckSymbolExists
模块用于检查 C 符号是否存在。