CheckLibraryExists

Check once if the function exists in system or specified library.

check_library_exists
check_library_exists(<library> <function> <location> <variable>)

Check that the library <library> exists in the given location <location> and has the specified <function>. The result is stored in an internal cache variable <variable>. If <location> is empty string, default directories are searched.

Prefer using CheckSymbolExists or CheckSourceCompiles instead of this module for more robust detection if a function is available in a library.

The following variables may be set before calling this macro to modify the way the check is run:

CMAKE_REQUIRED_FLAGS

String of additional flags to pass to the compiler. The string must be space-delimited--a ;-list will not work. The contents of CMAKE_<LANG>_FLAGS and its associated configuration-specific variable are automatically added to the compiler command before the contents of CMAKE_REQUIRED_FLAGS.

CMAKE_REQUIRED_DEFINITIONS

A ;-list of compiler definitions of the form -DFOO or -DFOO=bar. A definition for the name specified by <resultVar> will also be added automatically.

CMAKE_REQUIRED_LINK_OPTIONS

Added in version 3.14.

A ;-list of options to add to the link command (see try_compile() for further details).

CMAKE_REQUIRED_LIBRARIES

A ;-list of libraries to add to the link command. These can be the name of system libraries or they can be Imported Targets (see try_compile() for further details).

CMAKE_REQUIRED_LINK_DIRECTORIES

Added in version 3.31.

A ;-list of libraries search paths to pass to the linker (see try_compile() for further details).

CMAKE_REQUIRED_QUIET

Added in version 3.1.

If this variable evaluates to a boolean true value, all status messages associated with the check will be suppressed.

Examples

This module can be useful for performing so-called sanity checks to verify that the specified library provides the expected functionality and is indeed the correct one being located.

For example, to check if the curl library exists in the default paths and has the curl_easy_perform function:

include(CheckLibraryExists)
check_library_exists(curl curl_easy_perform "" HAVE_LIBRARY_CURL)

To check if library exists in specific non-standard location and has a specified function:

include(CheckLibraryExists)
check_library_exists(curl curl_easy_perform "/opt/curl/lib" HAVE_LIBRARY_CURL)

Also IMPORTED library (for example, from the find_package() call) can be used:

find_package(CURL)

# ...

if(TARGET CURL::libcurl)
  include(CheckLibraryExists)
  check_library_exists(CURL::libcurl curl_easy_perform "" HAVE_LIBRARY_CURL)
endif()