Spec-Zone.ru › CMake 3.24

try_compile

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

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

Попытка компиляции целых проектов

try_compile(<resultVar> <bindir> <srcdir>
            <projectName> [<targetName>] [CMAKE_FLAGS <flags>...]
            [OUTPUT_VARIABLE <var>])

Попробуйте скомпилировать проект. Успех или неудача try_compile, т.е. TRUE или FALSE соответственно, возвращается в <resultVar>.

В этом формате <srcdir> должен содержать полный проект CMake с файлом CMakeLists.txt и всеми исходными файлами. Файлы <bindir> и <srcdir> не будут удалены после выполнения этой команды. Укажите <targetName>, чтобы скомпилировать определённую цель вместо цели all или ALL_BUILD. Значения других опций см. ниже.

Изменено в версии 3.24: Переменные CMake, описывающие параметры платформы, и те, которые перечислены переменной CMAKE_TRY_COMPILE_PLATFORM_VARIABLES, распространяются в конфигурацию сборки проекта. См. политику CMP0137. Ранее это выполнялось только подписью исходного файла исходного файла.

Попытка компиляции исходных файлов

try_compile(<resultVar> <bindir> <srcfile|SOURCES srcfile...>
            [CMAKE_FLAGS <flags>...]
            [COMPILE_DEFINITIONS <defs>...]
            [LINK_OPTIONS <options>...]
            [LINK_LIBRARIES <libs>...]
            [OUTPUT_VARIABLE <var>]
            [COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
            [<LANG>_STANDARD <std>]
            [<LANG>_STANDARD_REQUIRED <bool>]
            [<LANG>_EXTENSIONS <bool>]
            )

Попробуйте скомпилировать исполняемый файл или статическую библиотеку из одного или нескольких исходных файлов (который из них определяется переменной CMAKE_TRY_COMPILE_TARGET_TYPE). Успех или неудача try_compile, т.е. TRUE или FALSE соответственно, возвращается в <resultVar>.

В этом формате необходимо предоставить один или несколько исходных файлов. Если CMAKE_TRY_COMPILE_TARGET_TYPE не задано или установлено в EXECUTABLE, исходные файлы должны включать определение для main, и CMake создаст файл CMakeLists.txt для компиляции исходного кода как исполняемого файла. Если CMAKE_TRY_COMPILE_TARGET_TYPE установлено в STATIC_LIBRARY, вместо этого будет построена статическая библиотека, и определение main не требуется. Для исполняемого файла сгенерированный файл CMakeLists.txt будет содержать что-то вроде следующего:

add_definitions(<expanded COMPILE_DEFINITIONS from caller>)
include_directories(${INCLUDE_DIRECTORIES})
link_directories(${LINK_DIRECTORIES})
add_executable(cmTryCompileExec <srcfile>...)
target_link_options(cmTryCompileExec PRIVATE <LINK_OPTIONS from caller>)
target_link_libraries(cmTryCompileExec ${LINK_LIBRARIES})

Опции:

CMAKE_FLAGS <flags>...

Укажите флаги в формате -DVAR:TYPE=VALUE для передачи в командную строку cmake , используемую для управления сборкой теста. Приведенный пример демонстрирует, как используются значения переменных INCLUDE_DIRECTORIES, LINK_DIRECTORIES, и LINK_LIBRARIES.

COMPILE_DEFINITIONS <defs>...

Укажите аргументы -Ddefinition для передачи в add_definitions() в сгенерированном проекте теста.

COPY_FILE <fileName>

Скопируйте скомпилированный исполняемый файл или статическую библиотеку в указанный <fileName>.

COPY_FILE_ERROR <var>

Используйте после COPY_FILE , чтобы сохранить в переменную <var> любые сообщения об ошибках, возникшие при попытке скопировать файл.

LINK_LIBRARIES <libs>...

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

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

LINK_OPTIONS <options>...

Новое в версии 3.14.

Укажите параметры шага компоновки для передачи в target_link_options() или для установки свойства цели STATIC_LIBRARY_OPTIONS в сгенерированном проекте, в зависимости от переменной CMAKE_TRY_COMPILE_TARGET_TYPE.

OUTPUT_VARIABLE <var>

Сохраните вывод процесса сборки в указанной переменной.

<LANG>_STANDARD <std>

Новое в версии 3.8.

Укажите свойства цели C_STANDARD, CXX_STANDARD, OBJC_STANDARD, OBJCXX_STANDARD или CUDA_STANDARD сгенерированного проекта.

<LANG>_STANDARD_REQUIRED <bool>

Новое в версии 3.8.

Укажите свойства цели C_STANDARD_REQUIRED, CXX_STANDARD_REQUIRED, OBJC_STANDARD_REQUIRED, OBJCXX_STANDARD_REQUIRED или CUDA_STANDARD_REQUIRED сгенерированного проекта.

<LANG>_EXTENSIONS <bool>

Новое в версии 3.8.

Укажите свойства цели C_EXTENSIONS, CXX_EXTENSIONS, OBJC_EXTENSIONS, OBJCXX_EXTENSIONS или CUDA_EXTENSIONS сгенерированного проекта.

Во всех этих случаях файлы в <bindir>/CMakeFiles/CMakeTmp будут автоматически очищены. Для отладки --debug-trycompile можно передать cmake , чтобы избежать этой очистки. Однако, несколько последовательных операций try_compile повторно используют эту отдельную выходную директорию. Если вы используете --debug-trycompile, вы можете отлаживать только один вызов try_compile за раз. Рекомендуемый подход — защищать все вызовы try_compile в вашем проекте логикой if(NOT DEFINED <resultVar>), конфигурировать с помощью cmake до конца один раз, затем удалить запись кэша, связанную с вызовом try_compile, который вас интересует, и затем запустить cmake снова с --debug-trycompile.

Другие параметры поведения

Новое в версии 3.4: Если установлено, следующие переменные передаются в сгенерированный try_compile CMakeLists.txt для инициализации свойств целевого объекта с использованием значений по умолчанию:

  • CMAKE_CUDA_RUNTIME_LIBRARY
  • CMAKE_ENABLE_EXPORTS
  • CMAKE_LINK_SEARCH_START_STATIC
  • CMAKE_LINK_SEARCH_END_STATIC
  • CMAKE_MSVC_RUNTIME_LIBRARY
  • CMAKE_POSITION_INDEPENDENT_CODE
  • CMAKE_WATCOM_RUNTIME_LIBRARY

Если CMP0056 установлено в NEW, то CMAKE_EXE_LINKER_FLAGS также передаётся.

Изменено в версии 3.14: Если CMP0083 установлено в NEW, то для получения правильного поведения во время линковки, необходимо вызвать команду check_pie_supported() из модуля CheckPIESupported перед использованием команды try_compile().

Текущие настройки CMP0065 и CMP0083 передаются в сгенерированный тестовый проект.

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

Новое в версии 3.6: Установите переменную CMAKE_TRY_COMPILE_TARGET_TYPE для указания типа целевого объекта, используемого для получения подписи исходного файла.

Новое в версии 3.6: Установите переменную CMAKE_TRY_COMPILE_PLATFORM_VARIABLES для указания переменных, которые должны быть переданы в тестовый проект. Эта переменная предназначена для использования только в файлах инструментальных цепочек и учитывается только командой try_compile() для исходных файлов, а не для всего проекта.

Изменено в версии 3.8: Если CMP0067 установлено в NEW, или используются какие-либо из вариантов <LANG>_STANDARD, <LANG>_STANDARD_REQUIRED, или <LANG>_EXTENSIONS, то учитываются переменные стандарт языка:

  • CMAKE_C_STANDARD
  • CMAKE_C_STANDARD_REQUIRED
  • CMAKE_C_EXTENSIONS
  • CMAKE_CXX_STANDARD
  • CMAKE_CXX_STANDARD_REQUIRED
  • CMAKE_CXX_EXTENSIONS
  • CMAKE_OBJC_STANDARD
  • CMAKE_OBJC_STANDARD_REQUIRED
  • CMAKE_OBJC_EXTENSIONS
  • CMAKE_OBJCXX_STANDARD
  • CMAKE_OBJCXX_STANDARD_REQUIRED
  • CMAKE_OBJCXX_EXTENSIONS
  • CMAKE_CUDA_STANDARD
  • CMAKE_CUDA_STANDARD_REQUIRED
  • CMAKE_CUDA_EXTENSIONS

Их значения используются для установки соответствующих свойств целевого объекта в сгенерированном проекте (если не переопределены явным параметром).

Изменено в версии 3.14: Для генератора Green Hills MULTI в тестовый проект также передаются переменные кэша пользовательской настройки набора инструментов GHS и целевой системы.

Новое в версии 3.24: Переменная CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES может быть установлена для отключения передачи переменных платформы в тестовый проект.

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

Spec-Zone.ru

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