# CheckCXXSymbolExists

Check if a symbol exists as a function, variable, or macro in `C++`.

check_cxx_symbol_exists

      check_cxx_symbol_exists(<symbol> <files> <variable>)

  Check that the `<symbol>` is available after including given header `<files>` and store the result in a `<variable>`. Specify the list of files in one argument as a semicolon-separated list. `check_cxx_symbol_exists()` can be used to check for symbols as seen by the C++ compiler, as opposed to `check_symbol_exists()`, which always uses the `C` compiler.

  If the header files define the symbol as a macro it is considered available and assumed to work. If the header files declare the symbol as a function or variable then the symbol must also be available for linking. If the symbol is a type, enum value, or C++ template it will not be recognized: consider using the `CheckTypeSize` or `CheckSourceCompiles` module instead.

Note

This command is unreliable when `<symbol>` is (potentially) an overloaded function. Since there is no reliable way to predict whether a given function in the system environment may be defined as an overloaded function or may be an overloaded function on other systems or will become so in the future, it is generally advised to use the `CheckSourceCompiles` module for checking any function symbol (unless somehow you surely know the checked function is not overloaded on other systems or will not be so in the future).

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_INCLUDES`

>   A ;-list of header search paths to pass to the compiler. These will be the only header search paths used--the contents of the `INCLUDE_DIRECTORIES` directory property will be ignored.

> `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.

For example:

    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)