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() для получения информации о том, как создаётся проект для компиляции исходного файла.
Доступны следующие параметры:
-
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 -
Вывод со стандартного вывода и стандартного потока ошибок, если исполняемый файл будет запущен на целевой платформе. Это создаётся только в том случае, если был использован параметр
RUN_OUTPUT_VARIABLEилиOUTPUT_VARIABLE.
Чтобы упростить кросс-компиляцию вашего проекта, используйте try_run только если это действительно необходимо. Если вы используете try_run, используйте параметры RUN_OUTPUT_VARIABLE или OUTPUT_VARIABLE только в том случае, если это действительно необходимо. Использование этих параметров потребует, что при кросс-компиляции переменные кэша должны быть установлены вручную в выходные данные исполняемого файла. Вы также можете "защитить" вызовы try_run с помощью блока if(), проверяющего переменную CMAKE_CROSSCOMPILING и предоставить лёгкий для настройки альтернативный вариант для этого случая.
© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.24/command/try_run.html