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>. Если сборка прошла успешно, этот исполняемый файл запустится, и код возврата будет сохранён в <runResultVar>. Если исполняемый файл был создан, но не удалось его запустить, то <runResultVar> будет установлено в FAILED_TO_RUN. См. команду try_compile() для документации об общих параметрах для обеих команд и информации о том, как создаётся тестовый проект для сборки исходного файла.
Должны быть предоставлены один или несколько исходных файлов. Кроме того, один из SOURCES и/или SOURCE_FROM_* должен предшествовать другим ключевым словам.
Новая версия с 3.26: Эта команда записывает событие событие try_run в журнал cmake-configure, если параметр 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>...]
[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.
Чтобы упростить кросс-компиляцию вашего проекта, используйте try_run только в случае крайней необходимости. Если вы используете try_run, используйте параметры RUN_OUTPUT_STDOUT_VARIABLE, RUN_OUTPUT_STDERR_VARIABLE, RUN_OUTPUT_VARIABLE или OUTPUT_VARIABLE только в случае крайней необходимости. Использование этих параметров потребует, чтобы при кросс-компиляции переменные кеша были установлены вручную, до значений вывода исполняемого файла. Вы также можете "защитить" вызовы try_run с блоком if(), проверяющим переменную CMAKE_CROSSCOMPILING, и предоставить лёгкий способ установки альтернативы в этом случае.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/command/try_run.html