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 - Вывод из stdout и stderr, если исполняемый файл будет запущен на целевой платформе. Он создаётся только в случае использования параметров
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.9/command/try_run.html