Spec-Zone.ru › CMake

try_run

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

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

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

try_run(<runResultVar> <compileResultVar>
        [SOURCES_TYPE <type>]
        {SOURCES <srcfile>...                 |
         SOURCE_FROM_CONTENT <name> <content> |
         SOURCE_FROM_VAR <name> <var>         |
         SOURCE_FROM_FILE <name> <path>       }...
        [LOG_DESCRIPTION <text>]
        [NO_CACHE]
        [NO_LOG]
        [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>]
        [WORKING_DIRECTORY <var>]
        [ARGS <args>...]
        )

Добавлено в версии 3.25.

Попробовать создать исполняемый файл из одного или нескольких исходных файлов. В случае успешной сборки возвращается логическое значение true, а в случае сбоя сборки — логическое значение false в <compileResultVar> (значение кэшируется, если не указан параметр NO_CACHE). Если сборка завершилась успешно, запускается исполняемый файл, а код завершения сохраняется в <runResultVar> (значение кэшируется, если не указан параметр NO_CACHE). Если исполняемый файл был собран, но его не удалось запустить, значение <runResultVar> будет установлено в FAILED_TO_RUN. Документацию по общим для обеих команд параметрам и сведения о том, как создаётся тестовый проект для сборки исходного файла, см. в описании команды try_compile().

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

Добавлено в версии 3.26: Эта команда записывает событие try_run в журнале конфигурирования, если не указан параметр NO_LOG.

Эта команда поддерживает альтернативный синтаксис для версий CMake ниже 3.25. Для ясности рекомендуется использовать синтаксис, приведённый выше.

try_run(<runResultVar> <compileResultVar>
        <bindir> {<srcfile>|SOURCES <srcfile>...}
        [CMAKE_FLAGS <flags>...]
        [COMPILE_DEFINITIONS <defs>...]
        [LINK_OPTIONS <options>...]
        [LINK_LIBRARIES <libs>...]
        [LINKER_LANGUAGE <lang>]
        [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>]
        [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, чтобы выбрать конфигурацию сборки:

  • Для генераторов с несколькими конфигурациями эта переменная выбирает конфигурацию для сборки.
  • Для генераторов с одной конфигурацией она задаёт CMAKE_BUILD_TYPE в тестовом проекте.

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

Добавлено в версии 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.

<runResultVar>__TRYRUN_OUTPUT_STDOUT

Добавлено в версии 3.25.

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

<runResultVar>__TRYRUN_OUTPUT_STDERR

Добавлено в версии 3.25.

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

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

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

Spec-Zone.ru

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