Spec-Zone.ru › CMake 3.20

try_run

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

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

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

try_run(<runResultVar> <compileResultVar>
        <bindir> <srcfile> [CMAKE_FLAGS <flags>...]
        [COMPILE_DEFINITIONS <defs>...]
        [LINK_OPTIONS <options>...]
        [LINK_LIBRARIES <libs>...]
        [COMPILE_OUTPUT_VARIABLE <var>]
        [RUN_OUTPUT_VARIABLE <var>]
        [OUTPUT_VARIABLE <var>]
        [WORKING_DIRECTORY <var>]
        [ARGS <args>...])

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

Введено в версии 3.14: Имена переменных результатов <runResultVar> и <compileResultVar> определяются пользователем. Ранее они имели фиксированные имена RUN_RESULT_VAR и COMPILE_RESULT_VAR.

Варианты:

CMAKE_FLAGS <flags>...

Укажите флаги в формате -DVAR:TYPE=VALUE для передачи командной строке cmake , используемой для управления тестовым построением. Пример в try_compile() показывает, как используются значения переменных INCLUDE_DIRECTORIES, LINK_DIRECTORIES, и LINK_LIBRARIES.

COMPILE_DEFINITIONS <defs>...

Укажите аргументы -Ddefinition для передачи команде add_definitions() в сгенерированном тестовом проекте.

COMPILE_OUTPUT_VARIABLE <var>

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

LINK_LIBRARIES <libs>...

Введено в версии 3.2.

Укажите библиотеки для подключения в сгенерированном проекте. Список библиотек может ссылаться на системные библиотеки и на Импортированные целевые объекты из вызывающего проекта.

Если этот параметр указан, любые значения -DLINK_LIBRARIES=... , заданные для параметра CMAKE_FLAGS , будут проигнорированы.

LINK_OPTIONS <options>...

Введено в версии 3.14.

Укажите параметры шага линковки, которые следует передать команде target_link_options() в сгенерированном проекте.

OUTPUT_VARIABLE <var>

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

RUN_OUTPUT_VARIABLE <var>

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

WORKING_DIRECTORY <var>

Введено в версии 3.20.

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

Другие настройки поведения

Установите переменную 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_VARIABLE или OUTPUT_VARIABLE только в случае крайней необходимости. Их использование потребует, что при кросс-компиляции переменные кэша необходимо будет вручную установить до вывода исполняемого файла. Вы также можете «защитить» вызовы try_run с помощью блока if() , проверяющего переменную CMAKE_CROSSCOMPILING, и предоставить лёгкий в настройке альтернативный вариант для этого случая.

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

Spec-Zone.ru

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