функция
Начать запись функции для последующего вызова в качестве команды.
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# был передан в функцию как дополнительный аргумент.
См. также
© 2000–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/command/function.html