|
|
|
try_compile
|
|
|
|
-----------
|
|
|
|
|
|
|
|
.. only:: html
|
|
|
|
|
|
|
|
.. contents::
|
|
|
|
|
|
|
|
Try building some code.
|
|
|
|
|
|
|
|
Try Compiling Whole Projects
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
::
|
|
|
|
|
|
|
|
try_compile(RESULT_VAR <bindir> <srcdir>
|
|
|
|
<projectName> [<targetName>] [CMAKE_FLAGS <flags>...]
|
|
|
|
[OUTPUT_VARIABLE <var>])
|
|
|
|
|
|
|
|
Try building a project. The success or failure of the ``try_compile``,
|
|
|
|
i.e. ``TRUE`` or ``FALSE`` respectively, is returned in ``RESULT_VAR``.
|
|
|
|
|
|
|
|
In this form, ``<srcdir>`` should contain a complete CMake project with a
|
|
|
|
``CMakeLists.txt`` file and all sources. The ``<bindir>`` and ``<srcdir>``
|
|
|
|
will not be deleted after this command is run. Specify ``<targetName>`` to
|
|
|
|
build a specific target instead of the ``all`` or ``ALL_BUILD`` target. See
|
|
|
|
below for the meaning of other options.
|
|
|
|
|
|
|
|
Try Compiling Source Files
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
::
|
|
|
|
|
|
|
|
try_compile(RESULT_VAR <bindir> <srcfile|SOURCES srcfile...>
|
|
|
|
[CMAKE_FLAGS <flags>...]
|
|
|
|
[COMPILE_DEFINITIONS <defs>...]
|
|
|
|
[LINK_LIBRARIES <libs>...]
|
|
|
|
[OUTPUT_VARIABLE <var>]
|
|
|
|
[COPY_FILE <fileName> [COPY_FILE_ERROR <var>]])
|
|
|
|
|
|
|
|
Try building an executable from one or more source files. The success or
|
|
|
|
failure of the ``try_compile``, i.e. ``TRUE`` or ``FALSE`` respectively, is
|
|
|
|
returned in ``RESULT_VAR``.
|
|
|
|
|
|
|
|
In this form the user need only supply one or more source files that include a
|
|
|
|
definition for ``main``. CMake will create a ``CMakeLists.txt`` file to build
|
|
|
|
the source(s) as an executable that looks something like this::
|
|
|
|
|
|
|
|
add_definitions(<expanded COMPILE_DEFINITIONS from caller>)
|
|
|
|
include_directories(${INCLUDE_DIRECTORIES})
|
|
|
|
link_directories(${LINK_DIRECTORIES})
|
|
|
|
add_executable(cmTryCompileExec <srcfile>...)
|
|
|
|
target_link_libraries(cmTryCompileExec ${LINK_LIBRARIES})
|
|
|
|
|
|
|
|
The options are:
|
|
|
|
|
|
|
|
``CMAKE_FLAGS <flags>...``
|
|
|
|
Specify flags of the form ``-DVAR:TYPE=VALUE`` to be passed to
|
|
|
|
the ``cmake`` command-line used to drive the test build.
|
|
|
|
The above example shows how values for variables
|
|
|
|
``INCLUDE_DIRECTORIES``, ``LINK_DIRECTORIES``, and ``LINK_LIBRARIES``
|
|
|
|
are used.
|
|
|
|
|
|
|
|
``COMPILE_DEFINITIONS <defs>...``
|
|
|
|
Specify ``-Ddefinition`` arguments to pass to ``add_definitions``
|
|
|
|
in the generated test project.
|
|
|
|
|
|
|
|
``COPY_FILE <fileName>``
|
|
|
|
Copy the linked executable to the given ``<fileName>``.
|
|
|
|
|
|
|
|
``COPY_FILE_ERROR <var>``
|
|
|
|
Use after ``COPY_FILE`` to capture into variable ``<var>`` any error
|
|
|
|
message encountered while trying to copy the file.
|
|
|
|
|
|
|
|
``LINK_LIBRARIES <libs>...``
|
|
|
|
Specify libraries to be linked in the generated project.
|
|
|
|
The list of libraries may refer to system libraries and to
|
|
|
|
:ref:`Imported Targets <Imported Targets>` from the calling project.
|
|
|
|
|
|
|
|
If this option is specified, any ``-DLINK_LIBRARIES=...`` value
|
|
|
|
given to the ``CMAKE_FLAGS`` option will be ignored.
|
|
|
|
|
|
|
|
``OUTPUT_VARIABLE <var>``
|
|
|
|
Store the output from the build process the given variable.
|
|
|
|
|
|
|
|
In this version all files in ``<bindir>/CMakeFiles/CMakeTmp`` will be
|
|
|
|
cleaned automatically. For debugging, ``--debug-trycompile`` can be
|
|
|
|
passed to ``cmake`` to avoid this clean. However, multiple sequential
|
|
|
|
``try_compile`` operations reuse this single output directory. If you use
|
|
|
|
``--debug-trycompile``, you can only debug one ``try_compile`` call at a time.
|
|
|
|
The recommended procedure is to protect all ``try_compile`` calls in your
|
|
|
|
project by ``if(NOT DEFINED RESULT_VAR)`` logic, configure with cmake
|
|
|
|
all the way through once, then delete the cache entry associated with
|
|
|
|
the try_compile call of interest, and then re-run cmake again with
|
|
|
|
``--debug-trycompile``.
|
|
|
|
|
|
|
|
Other Behavior Settings
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
If set, the following variables are passed in to the generated
|
|
|
|
try_compile CMakeLists.txt to initialize compile target properties with
|
|
|
|
default values:
|
|
|
|
|
|
|
|
* :variable:`CMAKE_ENABLE_EXPORTS`
|
|
|
|
* :variable:`CMAKE_LINK_SEARCH_START_STATIC`
|
|
|
|
* :variable:`CMAKE_LINK_SEARCH_END_STATIC`
|
|
|
|
* :variable:`CMAKE_POSITION_INDEPENDENT_CODE`
|
|
|
|
|
|
|
|
If :policy:`CMP0056` is set to ``NEW``, then
|
|
|
|
:variable:`CMAKE_EXE_LINKER_FLAGS` is passed in as well.
|
|
|
|
|
|
|
|
The current setting of :policy:`CMP0065` is set in the generated project.
|
|
|
|
|
|
|
|
Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose
|
|
|
|
a build configuration.
|
|
|
|
|
|
|
|
Set the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to specify
|
|
|
|
the type of target used for the source file signature.
|
|
|
|
|
|
|
|
Set the :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable to specify
|
|
|
|
variables that must be propagated into the test project. This variable is
|
|
|
|
meant for use only in toolchain files.
|