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.7/command/try_run.html