| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file Copyright.txt or https://cmake.org/licensing for details. |
| |
| #[=======================================================================[.rst: |
| CheckCXXSymbolExists |
| -------------------- |
| |
| Check if a symbol exists as a function, variable, or macro in ``C++``. |
| |
| .. command:: check_cxx_symbol_exists |
| |
| .. code-block:: cmake |
| |
| 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 :command:`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 :module:`CheckTypeSize` |
| or :module:`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 :module:`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 :ref:`;-list <CMake Language Lists>` of macros to define (-DFOO=bar). |
| ``CMAKE_REQUIRED_INCLUDES`` |
| a :ref:`;-list <CMake Language Lists>` of header search paths to pass to |
| the compiler. |
| ``CMAKE_REQUIRED_LINK_OPTIONS`` |
| .. versionadded:: 3.14 |
| a :ref:`;-list <CMake Language Lists>` of options to add to the link command. |
| ``CMAKE_REQUIRED_LIBRARIES`` |
| a :ref:`;-list <CMake Language Lists>` of libraries to add to the link |
| command. See policy :policy:`CMP0075`. |
| ``CMAKE_REQUIRED_QUIET`` |
| .. versionadded:: 3.1 |
| execute quietly without messages. |
| |
| For example: |
| |
| .. code-block:: cmake |
| |
| 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) |
| #]=======================================================================] |
| |
| include_guard(GLOBAL) |
| include(CheckSymbolExists) |
| |
| macro(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE) |
| __CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" ) |
| endmacro() |