Spec-Zone.ru › CMake

Проверка компиляции исходного кода

Добавлена в версии 3.19.

Проверка возможности построения исходного кода для заданного языка.

check_source_compiles
check_source_compiles(<lang> <code> <resultVar>
                      [FAIL_REGEX <regex1> [<regex2>...]]
                      [SRC_EXT <extension>])

Проверка, что исходный код, предоставленный в <code>, может быть скомпилирован для языка программирования <lang>. Результат сохраняется во внутренней переменной кэша, указанной в <resultVar>, с логическим значением true для успешного выполнения и логическим значением false для неудачи.

Если FAIL_REGEX задано, неудача определяется путем проверки, соответствует ли что-либо в выводе компилятора любому из указанных регулярных выражений.

По умолчанию, исходному файлу теста будет присвоено расширение файла, соответствующее запрошенному языку. Опция SRC_EXT может быть использована для переопределения этого на .<extension>.

Пример на C проверяет, поддерживает ли компилятор атрибут noreturn:

set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")

check_source_compiles(C
"#if !__has_c_attribute(noreturn)
#error \"No noreturn attribute\"
#endif"
HAVE_NORETURN)

Пример на Fortran проверяет, поддерживает ли компилятор атрибут процедуры pure:

set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")

check_source_compiles(Fortran
"pure subroutine foo()
end subroutine"
HAVE_PURE)

Внутренне, используется try_compile() для компиляции исходного кода. Если CMAKE_TRY_COMPILE_TARGET_TYPE установлено в значение EXECUTABLE (по умолчанию), исходный код компилируется и линковался как исполняемая программа. Если установлено значение STATIC_LIBRARY, исходный код компилируется, но не линковался. В любом случае, все функции должны быть объявлены как обычно.

См. также check_source_runs() для запуска скомпилированного исходного кода.

Команды компиляции и линковки могут быть изменены путем установки любых следующих переменных до вызова check_source_compiles():

CMAKE_REQUIRED_FLAGS

Строка дополнительных флагов для компилятора. Строка должна быть разделена пробелами – ;-список не сработает. Содержимое CMAKE_<LANG>_FLAGS и его соответствующая переменная, специфичная для конфигурации, автоматически добавляются к команде компилятора перед содержимым CMAKE_REQUIRED_FLAGS.

CMAKE_REQUIRED_DEFINITIONS

;-список определений компилятора в формате -DFOO или -DFOO=bar. Определение для имени, указанного в <resultVar> также будет автоматически добавлено.

CMAKE_REQUIRED_INCLUDES

;-список путей поиска заголовков для передачи компилятору. Это будут единственные пути поиска заголовков – содержимое свойства директории INCLUDE_DIRECTORIES будет проигнорировано.

CMAKE_REQUIRED_LINK_OPTIONS

Добавлена в версии 3.14.

;-список опций для добавления к команде линковки (см. try_compile() для получения дополнительных сведений).

CMAKE_REQUIRED_LIBRARIES

;-список библиотек для добавления к команде линковки. Это могут быть имена системных библиотек, или это могут быть Импортированные цели (см. try_compile() для получения дополнительных сведений).

CMAKE_REQUIRED_LINK_DIRECTORIES

Добавлена в версии 3.31.

;-список путей поиска библиотек для передачи линковщику (см. try_compile() для получения дополнительных сведений).

CMAKE_REQUIRED_QUIET

Добавлена в версии 3.1.

Если эта переменная имеет логическое значение «истина», все сообщения об статусе, связанные с проверкой, будут подавлены.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/CheckSourceCompiles.html

Spec-Zone.ru

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