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_EXPORTSCMAKE_LINK_SEARCH_START_STATICCMAKE_LINK_SEARCH_END_STATICCMAKE_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_STANDARDCMAKE_C_STANDARD_REQUIREDCMAKE_C_EXTENSIONSCMAKE_CXX_STANDARDCMAKE_CXX_STANDARD_REQUIREDCMAKE_CXX_EXTENSIONSCMAKE_CUDA_STANDARDCMAKE_CUDA_STANDARD_REQUIREDCMAKE_CUDA_EXTENSIONS
Их значения используются для установки соответствующих свойств цели в сгенерированном проекте (если они не переопределены явным параметром).
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.9/command/try_compile.html