You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
5.4 KiB
151 lines
5.4 KiB
try_run
|
|
-------
|
|
|
|
.. only:: html
|
|
|
|
.. contents::
|
|
|
|
Try compiling and then running some code.
|
|
|
|
Try Compiling and Running Source Files
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
.. code-block:: cmake
|
|
|
|
try_run(<runResultVar> <compileResultVar>
|
|
<SOURCES <srcfile...> |
|
|
SOURCE_FROM_CONTENT <name> <content> |
|
|
SOURCE_FROM_VAR <name> <var> |
|
|
SOURCE_FROM_FILE <name> <path> >...
|
|
[NO_CACHE]
|
|
[CMAKE_FLAGS <flags>...]
|
|
[COMPILE_DEFINITIONS <defs>...]
|
|
[LINK_OPTIONS <options>...]
|
|
[LINK_LIBRARIES <libs>...]
|
|
[COMPILE_OUTPUT_VARIABLE <var>]
|
|
[COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
|
|
[<LANG>_STANDARD <std>]
|
|
[<LANG>_STANDARD_REQUIRED <bool>]
|
|
[<LANG>_EXTENSIONS <bool>]
|
|
[RUN_OUTPUT_VARIABLE <var>]
|
|
[RUN_OUTPUT_STDOUT_VARIABLE <var>]
|
|
[RUN_OUTPUT_STDERR_VARIABLE <var>]
|
|
[OUTPUT_VARIABLE <var>]
|
|
[WORKING_DIRECTORY <var>]
|
|
[ARGS <args>...]
|
|
)
|
|
|
|
.. versionadded:: 3.25
|
|
|
|
Try compiling a ``<srcfile>``. Returns ``TRUE`` or ``FALSE`` for success
|
|
or failure in ``<compileResultVar>``. If the compile succeeded, runs the
|
|
executable and returns its exit code in ``<runResultVar>``. If the
|
|
executable was built, but failed to run, then ``<runResultVar>`` will be
|
|
set to ``FAILED_TO_RUN``. See the :command:`try_compile` command for
|
|
documentation of options common to both commands, and for information on how
|
|
the test project is constructed to build the source file.
|
|
|
|
One or more source files must be provided. Additionally, one of ``SOURCES``
|
|
and/or ``SOURCE_FROM_*`` must precede other keywords.
|
|
|
|
This command also supports an alternate signature
|
|
which was present in older versions of CMake:
|
|
|
|
.. code-block:: cmake
|
|
|
|
try_run(<runResultVar> <compileResultVar>
|
|
<bindir> <srcfile|SOURCES srcfile...>
|
|
[NO_CACHE]
|
|
[CMAKE_FLAGS <flags>...]
|
|
[COMPILE_DEFINITIONS <defs>...]
|
|
[LINK_OPTIONS <options>...]
|
|
[LINK_LIBRARIES <libs>...]
|
|
[COMPILE_OUTPUT_VARIABLE <var>]
|
|
[COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
|
|
[<LANG>_STANDARD <std>]
|
|
[<LANG>_STANDARD_REQUIRED <bool>]
|
|
[<LANG>_EXTENSIONS <bool>]
|
|
[RUN_OUTPUT_VARIABLE <var>]
|
|
[RUN_OUTPUT_STDOUT_VARIABLE <var>]
|
|
[RUN_OUTPUT_STDERR_VARIABLE <var>]
|
|
[OUTPUT_VARIABLE <var>]
|
|
[WORKING_DIRECTORY <var>]
|
|
[ARGS <args>...]
|
|
)
|
|
|
|
The options specific to ``try_run`` are:
|
|
|
|
``COMPILE_OUTPUT_VARIABLE <var>``
|
|
Report the compile step build output in a given variable.
|
|
|
|
``OUTPUT_VARIABLE <var>``
|
|
Report the compile build output and the output from running the executable
|
|
in the given variable. This option exists for legacy reasons and is only
|
|
supported by the old ``try_run`` signature.
|
|
Prefer ``COMPILE_OUTPUT_VARIABLE`` and ``RUN_OUTPUT_VARIABLE`` instead.
|
|
|
|
``RUN_OUTPUT_VARIABLE <var>``
|
|
Report the output from running the executable in a given variable.
|
|
|
|
``RUN_OUTPUT_STDOUT_VARIABLE <var>``
|
|
.. versionadded:: 3.25
|
|
|
|
Report the output of stdout from running the executable in a given variable.
|
|
|
|
``RUN_OUTPUT_STDERR_VARIABLE <var>``
|
|
.. versionadded:: 3.25
|
|
|
|
Report the output of stderr from running the executable in a given variable.
|
|
|
|
``WORKING_DIRECTORY <var>``
|
|
.. versionadded:: 3.20
|
|
|
|
Run the executable in the given directory. If no ``WORKING_DIRECTORY`` is
|
|
specified, the executable will run in ``<bindir>`` or the current build
|
|
directory.
|
|
|
|
``ARGS <args>...``
|
|
Additional arguments to pass to the executable when running it.
|
|
|
|
Other Behavior Settings
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose
|
|
a build configuration.
|
|
|
|
Behavior when Cross Compiling
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
.. versionadded:: 3.3
|
|
Use ``CMAKE_CROSSCOMPILING_EMULATOR`` when running cross-compiled
|
|
binaries.
|
|
|
|
When cross compiling, the executable compiled in the first step
|
|
usually cannot be run on the build host. The ``try_run`` command checks
|
|
the :variable:`CMAKE_CROSSCOMPILING` variable to detect whether CMake is in
|
|
cross-compiling mode. If that is the case, it will still try to compile
|
|
the executable, but it will not try to run the executable unless the
|
|
:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable is set. Instead it
|
|
will create cache variables which must be filled by the user or by
|
|
presetting them in some CMake script file to the values the executable
|
|
would have produced if it had been run on its actual target platform.
|
|
These cache entries are:
|
|
|
|
``<runResultVar>``
|
|
Exit code if the executable were to be run on the target platform.
|
|
|
|
``<runResultVar>__TRYRUN_OUTPUT``
|
|
Output from stdout and stderr if the executable were to be run on
|
|
the target platform. This is created only if the
|
|
``RUN_OUTPUT_VARIABLE`` or ``OUTPUT_VARIABLE`` option was used.
|
|
|
|
In order to make cross compiling your project easier, use ``try_run``
|
|
only if really required. If you use ``try_run``, use the
|
|
``RUN_OUTPUT_STDOUT_VARIABLE``, ``RUN_OUTPUT_STDERR_VARIABLE``,
|
|
``RUN_OUTPUT_VARIABLE`` or ``OUTPUT_VARIABLE`` options only if really
|
|
required. Using them will require that when cross-compiling, the cache
|
|
variables will have to be set manually to the output of the executable.
|
|
You can also "guard" the calls to ``try_run`` with an :command:`if`
|
|
block checking the :variable:`CMAKE_CROSSCOMPILING` variable and
|
|
provide an easy-to-preset alternative for this case.
|