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 tocheck_symbol_exists()
, which always uses theC
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
orCheckCXXSourceCompiles
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 CheckCXXSourceCompiles
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 compile command line flags.
CMAKE_REQUIRED_DEFINITIONS
a ;-list of macros to define (-DFOO=bar).
CMAKE_REQUIRED_INCLUDES
a ;-list of header search paths to pass to the compiler.
CMAKE_REQUIRED_LINK_OPTIONS
a ;-list of options to add to the link command.
CMAKE_REQUIRED_LIBRARIES
a ;-list of libraries to add to the link command. See policy
CMP0075
.CMAKE_REQUIRED_QUIET
execute quietly without messages.
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)