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>]
[ARGS <args>...])
Попробуйте скомпилировать <srcfile>. Возвращает TRUE или FALSE для успеха или неудачи в <compileResultVar>. Если компиляция прошла успешно, запустит исполняемый файл и вернёт его код выхода в <runResultVar>. Если исполняемый файл был создан, но не смог запуститься, то <runResultVar> будет установлено значение 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будет проигнорировано. -
LINK_OPTIONS <options>... -
Укажите параметры этапа компоновки для передачи в
target_link_options()в сгенерированном проекте. -
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 значениями, которые исполняемый файл вывел бы, если бы он был запущен на целевой платформе. Эти записи кэша:
-
<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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/command/try_run.html