Spec-Zone.ru › CMake

function

Начать запись функции для последующего вызова в качестве команды.

function(<name> [<arg1> ...])
  <commands>
endfunction()

Определяет функцию с именем <name> , принимающую аргументы с именами <arg1>, ... <commands> в определении функции записываются; они не выполняются до тех пор, пока функция не будет вызвана.

По унаследованной традиции команда endfunction() допускает необязательный аргумент <name>. Если он используется, он должен быть точным повторением аргумента открывающей команды function.

Функция открывает новую область видимости: см. set(var PARENT_SCOPE) для получения подробностей.

См. документацию по команде cmake_policy() для поведения политик внутри функций.

См. документацию по команде macro() для различий между функциями CMake и макросами.

Вызов

Вызов функции нечувствителен к регистру. Функция, определенная как

function(foo)
  <commands>
endfunction()

может быть вызвана любым из

foo()
Foo()
FOO()
cmake_language(CALL foo)

и так далее. Однако настоятельно рекомендуется придерживаться регистра, выбранного при определении функции. Обычно функции используют имена со строчными буквами.

Добавлена в версии 3.18: Команда cmake_language(CALL ...) также может использоваться для вызова функции.

Аргументы

При вызове функции записанные <commands> сначала изменяются путем подстановки формальных параметров (${arg1}, ...) переданными аргументами, а затем вызываются как обычные команды.

В дополнение к ссылке на формальные параметры вы можете ссылаться на переменную ARGC, которая будет установлена в количество переданных в функцию аргументов, а также на ARGV0, ARGV1, ARGV2, ... которые будут содержать фактические значения переданных аргументов. Это облегчает создание функций с необязательными аргументами.

Кроме того, ARGV содержит список всех аргументов, переданных функции, а ARGN содержит список аргументов, идущих после последнего ожидаемого аргумента. Ссылка на ARGV# аргументы, превышающие ARGC, имеет неопределённое поведение. Проверка того, что ARGC больше #, является единственным способом гарантировать, что ARGV# был передан функции как дополнительный аргумент.

См. также

  • cmake_parse_arguments()
  • endfunction()
  • return()

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

Spec-Zone.ru

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