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