Spec-Zone.ru › CMake 3.13

try_run

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

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

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

try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
        bindir srcfile [CMAKE_FLAGS <flags>...]
        [COMPILE_DEFINITIONS <defs>...]
        [LINK_LIBRARIES <libs>...]
        [COMPILE_OUTPUT_VARIABLE <var>]
        [RUN_OUTPUT_VARIABLE <var>]
        [OUTPUT_VARIABLE <var>]
        [ARGS <args>...])

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

Доступны следующие параметры:

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

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

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

OUTPUT_VARIABLE <var>
Отчет о выводе компиляции и выводе из запускаемого исполняемого файла в заданной переменной. Этот параметр существует по историческим причинам. Используйте вместо него COMPILE_OUTPUT_VARIABLE и RUN_OUTPUT_VARIABLE.
RUN_OUTPUT_VARIABLE <var>
Отчет о выводе из запускаемого исполняемого файла в заданной переменной.

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

Установите переменную CMAKE_TRY_COMPILE_CONFIGURATION для выбора конфигурации сборки.

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

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

<RUN_RESULT_VAR>
Код выхода, если исполняемый файл будет запущен на целевой платформе.
<RUN_RESULT_VAR>__TRYRUN_OUTPUT
Вывод со стандартного потока вывода и стандартного потока ошибок, если исполняемый файл был запущен на целевой платформе. Этот вывод создаётся только если использовался параметр RUN_OUTPUT_VARIABLE или OUTPUT_VARIABLE.

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

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

Spec-Zone.ru

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