Spec-Zone.ru › CMake 3.25

try_run

  • Попробовать скомпилировать и запустить исходные файлы
  • Другие параметры поведения
  • Поведение при кросс-компиляции

Попробуйте скомпилировать и затем запустить некоторый код.

Попробовать скомпилировать и запустить исходные файлы

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>...]
        )

Новая в версии 3.25.

Попробуйте скомпилировать <srcfile>. Возвращает TRUE или FALSE для успешного или неудачного завершения в <compileResultVar>. Если компиляция прошла успешно, выполняет исполняемый файл и возвращает его код завершения в <runResultVar>. Если исполняемый файл был создан, но не был запущен, то <runResultVar> будет установлено в значение FAILED_TO_RUN. Обратитесь к команде try_compile() для документации по параметрам, общим для обеих команд, и информации о том, как создаётся тестовый проект для компиляции исходного файла.

Необходимо предоставить один или несколько исходных файлов. Кроме того, один из SOURCES и/или SOURCE_FROM_* должен предшествовать другим ключевым словам.

Эта команда также поддерживает альтернативную подпись, которая была в более ранних версиях 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>...]
        )

Параметры, специфичные для try_run:

COMPILE_OUTPUT_VARIABLE <var>

Вывести результат компиляции в заданной переменной.

OUTPUT_VARIABLE <var>

Вывести результат компиляции и результат выполнения исполняемого файла в заданной переменной. Этот параметр существует по историческим причинам и поддерживается только старой подписью try_run. Предпочтительнее использовать COMPILE_OUTPUT_VARIABLE и RUN_OUTPUT_VARIABLE вместо этого.

RUN_OUTPUT_VARIABLE <var>

Вывести результат выполнения исполняемого файла в заданной переменной.

RUN_OUTPUT_STDOUT_VARIABLE <var>

Новая в версии 3.25.

Вывести стандартный вывод (stdout) исполняемого файла в заданной переменной.

RUN_OUTPUT_STDERR_VARIABLE <var>

Новая в версии 3.25.

Вывести стандартный поток ошибок (stderr) исполняемого файла в заданной переменной.

WORKING_DIRECTORY <var>

Новая в версии 3.20.

Выполнить исполняемый файл в заданном каталоге. Если WORKING_DIRECTORY не указан, исполняемый файл будет запущен в <bindir> или в текущем каталоге сборки.

ARGS <args>...

Дополнительные аргументы для передачи исполняемому файлу при его запуске.

Другие параметры поведения

Установите переменную CMAKE_TRY_COMPILE_CONFIGURATION, чтобы выбрать конфигурацию сборки.

Поведение при кросс-компиляции

Новая в версии 3.3: Используйте CMAKE_CROSSCOMPILING_EMULATOR при запуске кросс-скомпилированных бинарных файлов.

При кросс-компиляции исполняемый файл, скомпилированный на первом шаге, обычно не может быть запущен на хосте сборки. Команда try_run проверяет переменную CMAKE_CROSSCOMPILING, чтобы определить, находится ли CMake в режиме кросс-компиляции. В этом случае он всё ещё попытается скомпилировать исполняемый файл, но не попытается запустить его, если переменная CMAKE_CROSSCOMPILING_EMULATOR не установлена. Вместо этого он создаст переменные кэша, которые должны быть заполнены пользователем или предварительно установлены в файле скрипта CMake до значений, которые исполняемый файл выдал бы, если бы он был запущен на его реальной целевой платформе. Эти записи кэша:

<runResultVar>

Код завершения, если исполняемый файл будет запущен на целевой платформе.

<runResultVar>__TRYRUN_OUTPUT

Вывод stdout и stderr, если исполняемый файл будет запущен на целевой платформе. Это создаётся только если используется параметр RUN_OUTPUT_VARIABLE или OUTPUT_VARIABLE.

Для упрощения кросс-компиляции вашего проекта, используйте try_run только если это действительно необходимо. Если вы используете try_run, используйте параметры RUN_OUTPUT_STDOUT_VARIABLE, RUN_OUTPUT_STDERR_VARIABLE, RUN_OUTPUT_VARIABLE или OUTPUT_VARIABLE только если это действительно необходимо. Их использование потребует, что при кросс-компиляции переменные кэша будут установлены вручную на выходные данные исполняемого файла. Вы также можете «защитить» вызовы try_run с помощью блока if(), проверяющего переменную CMAKE_CROSSCOMPILING и предоставить простую альтернативу для этого случая.

© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.25/command/try_run.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API