mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 12:49:36 -06:00
Modify some modules that ship with CMake to use the new SOURCES_FROM_* arguments to try_compile / try_run as added by commitscb14ae2b87(try_compile: Add SOURCE_FROM_{ARG,VAR}, 2022-09-21) and611d801790(try_compile: Add SOURCE_FROM_FILE, 2022-09-22). This covers users which previously either used an existing file (but sometimes needed to rename it), or which wrote out their source in entirety. It does NOT cover users that actually need configure_file functionality, as those will be more involved to update and will thus be tackled in part 2.
79 lines
3.0 KiB
CMake
79 lines
3.0 KiB
CMake
# 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(CheckSymbolExists.cxx "${SYMBOL}" "${FILES}" "${VARIABLE}" )
|
|
endmacro()
|