Spec-Zone.ru › CMake 3.12

try_compile

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

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

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

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

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

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

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

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

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

В этом формате пользователю необходимо только указать один или несколько исходных файлов, которые включают определение main. CMake создаст файл CMakeLists.txt для компиляции исходного(ых) файла(ов) в исполняемый файл, который будет примерно таким:

add_definitions(<expanded COMPILE_DEFINITIONS from caller>)
include_directories(${INCLUDE_DIRECTORIES})
link_directories(${LINK_DIRECTORIES})
add_executable(cmTryCompileExec <srcfile>...)
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, будет проигнорировано.

OUTPUT_VARIABLE <var>
Сохранить вывод процесса сборки в заданную переменную.
<LANG>_STANDARD <std>
Укажите свойство цели C_STANDARD, CXX_STANDARD или CUDA_STANDARD сгенерированного проекта.
<LANG>_STANDARD_REQUIRED <bool>
Укажите свойство цели C_STANDARD_REQUIRED, CXX_STANDARD_REQUIRED или CUDA_STANDARD_REQUIRED сгенерированного проекта.
<LANG>_EXTENSIONS <bool>
Укажите свойство цели C_EXTENSIONS, CXX_EXTENSIONS или CUDA_EXTENSIONS сгенерированного проекта.

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

Другие настройки поведения

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

  • CMAKE_ENABLE_EXPORTS
  • CMAKE_LINK_SEARCH_START_STATIC
  • CMAKE_LINK_SEARCH_END_STATIC
  • CMAKE_POSITION_INDEPENDENT_CODE

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

Текущее значение CMP0065 установлено в сгенерированном проекте.

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

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

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

Если 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_CUDA_STANDARD
  • CMAKE_CUDA_STANDARD_REQUIRED
  • CMAKE_CUDA_EXTENSIONS

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

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

Spec-Zone.ru

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