| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- 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> >...
- [LOG_DESCRIPTION <text>]
- [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...>
- [LOG_DESCRIPTION <text>]
- [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.
|