Spec-Zone.ru › CMake 3.17

функция

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

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()

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

Аргументы

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

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

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

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

Spec-Zone.ru

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